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

[C++ WinAPI] Problem z przekazywaniem parametrów w WndProc

Ostatnio zmodyfikowano 2012-10-29 16:06
Autor Wiadomość
mleko64
Temat założony przez niniejszego użytkownika
[C++ WinAPI] Problem z przekazywaniem parametrów w WndProc
» 2012-10-28 20:56:15
Witam!
Przejdę od razu do konkretów. Spróbuje wytłumaczyć mój problem klarowanie jak tylko się da.
Więc..
Mam plik menu.rc z taką przykładową strukturą:
C/C++
200 MENU
{
    POPUP "&Plik"
    {
        MENUITEM "&Nowa", 100
        MENUITEM "&Otwórz..", 101
        MENUITEM "&Zapisz", 102
        MENUITEM "Z&apisz jako..", 103
        MENUITEM SEPARATOR
        MENUITEM "Zakoń&cz", 104
    }
}
Wybierzmy sobie obojętnie jakie pole, może być menuitem o identyfikatorze 102.
Całej struktury WinAPI nie będę tu przedstawiał, tak jak mówiłem konkrety:
Mam taką kontrolkę:
C/C++
hText = CreateWindowEx( WS_EX_CLIENTEDGE, L"EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 480, 240, hwnd, NULL, hInstance, NULL );
Tworzy ona pole tekstowe, gdzie możemy sobie coś napisać.
Mamy teraz funkcję WndProc:
C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg ) {
       
        HANDLE_MSG( hwnd, WM_COMMAND, OnCommand );
        HANDLE_MSG( hwnd, WM_CLOSE, OnClose );
        HANDLE_MSG( hwnd, WM_DESTROY, OnDestroy );
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
Jak widać, zastosowałem tutaj łamacza komunikatów. Wszystkie komunikaty typu WM_COMMAND, są kierowane do funkcji OnCommand. Jak wiadomo, wszystkie pola z menu po kliknięciu generują właśnie taki komunikat.
Teraz mamy funkcje OnCommand:
C/C++
void OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify ) {
   
    switch( id ) {
    case 102:
        zapisz_plik( ??? ) //TUTAJ MAM PROBLEM!
        break;
    }
}
I teraz opis całej sytuacji: Napisze sobie coś w kontrolce i z menu kliknę pozycję Zapisz. Po kliknięciu generowany jest komunikat WM_COMMAND, który kierowany jest do funkcji OnCommand, gdzie przy pomocy switch'a weryfikuję co tak naprawdę zostało kliknięte. Jak widzimy w switch'u mamy nasze id 102, więc tutaj wchodzimy. I teraz chce załóżmy zapisać do pliku, to co napisałem w mojej kontrolce. Jak widzimy mam wywołanie funkcji "zapisz_plik", ale ja do tej funkcji potrzebuję przekazać uchwyt do mojej kontrolki z tekstem (czyli hText), aby taki tekst pobrać! Jak ja mam to zrobić?
Istnieją jakieś inne implementacje funkcji WndProc żeby to działało jakbym chciał?
Mam nadzieję, że wszystko jasno wytłumaczyłem.
Dziękuję i pozdrawiam,
mleko64
P-67852
xevuel
» 2012-10-29 16:06:00
Jeśli kontrolka z tekstem posiada identyfikator, a nie posiada uchwytu, możesz go pobrać za pomocą [MSDN] GetDlgItem. Jeśli jednak nie chcesz tworzyć identyfikatora dla kontrolki, musisz w jakiś sposób uchwyt do tego Edita uczynić widocznym w tej funkcji. Najprostszym rozwiązaniem byłoby chyba stworzenie zmiennej globalnej.
P-67922
« 1 »
  Strona 1 z 1