[C++, WinAPI] F1 w Dialogu

0

Trochę trudno znaleźć na forum posty z F1 (za krótka fraza), ale co się dało poszukałem i raczej nie ma tego co chcę, a chcę:
Mam dialog utworzony przez CreateDialog. Jest on głównym oknem programu. Główna pętla programuwygląda tak:

     HWND hD=CreateDialog(hInstance, MAKEINTRESOURCE(DIALOG_1),0, (DLGPROC)DialogProc);
	MSG msg;
	BOOL r=GetMessage(&msg,0,0,0);
	while(r!=0 && r!=-1){
		if(!(hD && IsDialogMessage(hD, &msg))){
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		r=GetMessage(&msg,0,0,0);
	}

O co chodzi: w procedurze dialogu chcę obsłużyć naciśnięcie F1. Próbowałem przez WM_KEYDOWN i WM_CHAR. I nic. Komunikaty nie przychodzą. W dialogu mam ListView i w subklasowanej procedurze oba komunikaty przychodzą, ale nie będę subklasował każdego przycisku itp. w dialogu. JAK TO ZROBIĆ W DIALOGU???

0

musi dzialac z WM_KEYDOWN cos robisz zle, sprobuj zrobic cos takiego:

WM_KEYDOWN:
switch(wparam)
{
case VK_F1:
//i tutaj jakies instrukcje
}

nie ma sily zeby nie dzialalo :P

0

Tak właśnie robię :) NIE DZIAŁA

0

Zrobiłem tak:

#include <windows.h>
#include "dialog.rh"

//===============================================
BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  switch(uMsg){
	  case WM_KEYDOWN:{
			MessageBox(hwnd, "Tu nie dziala","",MB_OK);
	  }break;

	  case WM_COMMAND:
			switch(LOWORD(wParam)){
				case IDCANCEL:
				case IDOK:
					PostQuitMessage(0);
				break;
			}
  }
  return 0;
};
//===================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int){
	HWND hD=CreateDialog(hInstance, MAKEINTRESOURCE(DIALOG_1),0, (DLGPROC)DialogProc);
	MSG msg;
	BOOL r=GetMessage(&msg,0,0,0);
	while(r!=0 && r!=-1){
		<b>if(msg.message==WM_KEYDOWN && msg.wParam==VK_F1)
			MessageBox(hD, "Tu dziala","",MB_OK);</b>
		if(!(hD && IsDialogMessage(hD, &msg))){
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		r=GetMessage(&msg,0,0,0);
	}
	return 0;
};

Tyle, że mi się to nie podoba :/, ale bez tych dwóch pogrubionych linijek, nie działa. Jeśli jest jakieś inne wyjście, to mam klapki dziś na oczach. ZDEJMIJCIE JE! :)

0

Taaa...

The WM_HELP message indicates that the user pressed the F1 key. If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu; otherwise, WM_HELP is sent to the window that has the keyboard focus. If no Window has the keyboard focus, WM_HELP is sent to the currently active window.

0

[browar]
Dziękuję za zdjęcie klapek. WM_HELP. MajGot...

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