Wątek zablokowany 2013-04-14 15:05 przez Rev.

winapi

0

cześć, ruszyłem właśnie winapi i powiedzcie mi czy wszystkie 'zdarzenia' i czynności po naciśnięciu jakiejś kontrolki obsługuje w tej pętli?

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        
    case WM_COMMAND:
        if( HWND( lParam ) == button )
            {
                //MessageBox( window, "Wcisnales button", "Message", MB_ICONINFORMATION | MB_OK );
                DWORD dlugosc = GetWindowTextLength( edit );
                LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
                
                //std::cout<< dlugosc;
                GetWindowText( edit, Bufor, dlugosc + 1 );
                
                char bufor[dlugosc];
                strcpy(bufor, Bufor );
                
                std::string name(bufor);
                std::cout<< name <<std::endl;
                
                GlobalFree( Bufor );
                
                
            }   
        break;
        
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
        
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    
    return 0;
}

czyli sprawdzam co zostało wciśnięte i mogę tutaj wrzucić klasy i funkcje spełniające przewidzianą funkcjonalność?

1

W większości tak, dopóki nie zaczną się okna modalne które mają niejako własną pętle.

1
  1. tu nigdzie nie ma pętli. WndProc jest wywoływane przez DispatchMessage, które powinno być w pętli.
  2. wszystkie komunikaty, których nie obsługujesz sam, wpadają do DefWindowProc (nie automatycznie; a tylko dlatego, że tak masz w kodzie)
  3. z czasem ten switch przybierze monstrualne rozmiary. dlatego wskazane jest rozbicie go, np. w ten sposób:
case WM_COMMAND: return OnWmCommand(hwnd, msg, wParam, lParam);

gdzie OnWmCommand to twoja funkcja która zajmuje się tylko tym komunikatem.

  1. funkcja WndProc jest charakterystyczna dla konkretnej klasy okna. jeśli otworzysz inne okno (choćby messageboksa) to będzie miało własną obsługę komunikatów (gotową albo też napisaną przez ciebie).
0

powiedziałem w pętli dla uproszczenia, oczywiście to WndProc znajduje się w odpowiedniej pętli...więc do switcha wrzucam własną funkcje w której to dopiero sprawdzam co zostało użyte w programie - tak czy inaczej funkcja ta będzie duża. Czyli coś takiego już przejdzie?

OnWmCommand(hwnd, msg, wParam, lParam);
{
    if ( HWND (lParam ) == global::save) {
        c_system_file system_file;
        system_file.save();
    }
        //tutaj kolejne sprawdzenia

}
0

winapi ciąg dalszy ;) w głównym oknie po naciśnięciu buttona tworze i wyświetlam nowe okno i teraz chciałbym żeby to okno było modalne czy jest do tego jakiś styl lub jakaś funkcja? wiem że mogę stworzyć okno dialogowe modalne funkcją DialogBox() ale to mnie nie ratuje...

1 użytkowników online, w tym zalogowanych: 0, gości: 1