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ą:
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ę:
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:
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:
void OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify ) {
switch( id ) {
case 102:
zapisz_plik( ??? )
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