Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI]Nie zawsze pojawiaja się wszystkie kontrolki.

Ostatnio zmodyfikowano 2011-06-14 09:48
Autor Wiadomość
GoldWolf
Temat założony przez niniejszego użytkownika
[WinAPI]Nie zawsze pojawiaja się wszystkie kontrolki.
» 2011-06-10 13:35:29
Hej, dlaczego czasami, mi się wszystkie kontrolki w głównym oknie nie pojawią.

Jaki mechanizm zastosować, by nie było takich cyrków.

C/C++
//tu takie fragment
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar ) {
    switch( msg ) {
    case WM_CREATE:
        {
           
            // DrawControls(hWnd);
            DrawControls( hWnd );
            HANDLE hThread =( HANDLE ) _beginthread( ThreadProc, 0, NULL );
            break;
        }
       
    case WM_COMMAND:
        //----------------------------
C/C++
//A tak wygląda funkcja-----------
int DrawControls( HWND hWnd ) {
    // Tworzymy pole tekstowe------------------------------------------
    hText = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 30, 45, 50, 20,
    hWnd, NULL, * hInst, NULL );
    Edit_LimitText( hText, 5 );
   
    //ustawiamy czcionkę -------------------------------------------------
    hFont = CreateFont( 21, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, "Arial" );
   
    //Tworzenie pól statycznychinfo o Ramie ---------------------------
    hStatic = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
    SS_LEFT, 20, 70, 150, 140, hWnd, NULL, * hInst, NULL );
    //----------
    hStatic1 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
    SS_CENTER, 20, 10, 320, 25, hWnd, NULL, * hInst, NULL );
    SendMessage( hStatic1, WM_SETFONT,( WPARAM ) hFont, 0 );
    SetWindowText( hStatic1, "Wprowadź ile :" );
   
   
    //pole informacyjne o procesorze-------------------------
    hStatic2 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
    SS_LEFT, 190, 40, 165, 130, hWnd, NULL, * hInst, NULL );
    //pole informacyjne o % użyciu procesora-------------------------
    hStatic3 = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE |
    SS_LEFT, 190, 171, 160, 35, hWnd, NULL, * hInst, NULL );
    // Tworzenie przycisku -----------------------------------------------
    // hButton1 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Pierwszy", WS_CHILD | WS_VISIBLE |
    // WS_BORDER, 30, 70, 150, 30, hWnd,( HMENU ) ID_PRZYCISK1, *hInst, NULL );
    hButton2 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Start", WS_CHILD | WS_VISIBLE |
    WS_BORDER, 90, 40, 80, 30, hWnd,( HMENU ) ID_PRZYCISK2, * hInst, NULL );
   
    return 1;
}
//-----------------------------------------------
P-33996
malan
» 2011-06-10 14:29:37
<< delete >>
P-33997
GoldWolf
Temat założony przez niniejszego użytkownika
» 2011-06-13 10:39:38
nie rozumiem odpowiedzi, gdzieś w kursie coś przeoczyłem

Mam jeszcze inny problem mianowicie z tym związaną. Mam taką funkcję do pokazywania obciążenia procka. Na XP odświeża się ok, a na 7 nie - pojawi się raz nie odświeża się.

C/C++
void __cdecl ThreadProc( void * Args )
{
    /*time_t seconds, sekundy;
    //char mam[100];
   
    seconds = time (NULL);
    sekundy = seconds + 5;
   
    //sprintf_s(mam,"%d", static_cast<int> (sekundy - seconds));
    //SetWindowText( hStatic, mam);*/
    int sekundy = 1;
   
    while( sekundy != 0 ) {
        Sleep( 700 );
        MonitorCPU( hWnd );
    }
    _endthread();
}
Jak widać jest to wątek, co robi MonitorCPU(hWnd);, o tym pisałem tutaj - http://cpp0x.pl/forum/temat/?id=4410 .

Do wyświetlania używam
SetWindowText( hStatic3, mam );

Na koniec odpowiedz na moje pierwszy pytanie, by zawsze się rysowało przeniosłem wywołanie funkcji z ciała - LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)

Do - int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lStart, INT nShow )

Kiedyś zadałem takie pytanie czy lepiej kontrolki malować z oknem czy w ciele komunikatów dokładnie
C/C++
case WM_CREATE:
{
   
    // DrawControls(hWnd);
    DrawControls( hWnd );
    HANDLE hThread =( HANDLE ) _beginthread( ThreadProc, 0, NULL );
    break;
}
Dostałem wtedy odpowiedź, że to zależy i doświadczenie nauczy. Więc, czy mogę przyjąć, że lepiej wszystkie kontrolki powoływać do życia razem z ciałem okna?
P-34091
DejaVu
» 2011-06-13 12:01:27
Chyba nie rozumiesz jak działa WinAPI. Rysowaniem kontrolek nie musisz się zajmować dopóki masz zapewnioną poprawną obsługę standardowych komunikatów. Jedyne co musisz zrobić to je utworzyć i umieścić na właściwym miejscu.
P-34094
GoldWolf
Temat założony przez niniejszego użytkownika
» 2011-06-13 13:05:53
Tylko jest jak napisałem, nie zmienia to nadal tego faktu. Napisałem rysuję, ale ogólnie o umieszczeni mi chodziło.
P-34095
DejaVu
» 2011-06-13 14:25:13
Sugerowałbym najpierw robić aplikację okienkową na jednym wątku. Myślę, że w tym wypadku z fragmentów kodu nic nie wywnioskujemy.
P-34097
GoldWolf
Temat założony przez niniejszego użytkownika
» 2011-06-14 09:48:59
Niestety to nie wchodzi w grę, muszę mieć kilka wątków, bo nie było by sensu jej tworzyć.
Na razie jest ok, tylko niektórych rzeczy raczej się domyślam.
P-34132
« 1 »
  Strona 1 z 1