请问在SDK对话框过程函数中如何获得键盘输入?我没有用CreateWindow()而是直接用函数
CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)DlgProc);
生成对话框其中DlgProc()为对话框过程,但是它并不接收WM_KEYDOWN消息;
另外,我不愿意生成.dlg文件,这很麻烦!我应怎样才能得到键盘输入?
IsDialogMessage(hDlg, &msg)可以吗?如果可以的话又该如何去用?谢谢了!
CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)DlgProc);
生成对话框其中DlgProc()为对话框过程,但是它并不接收WM_KEYDOWN消息;
另外,我不愿意生成.dlg文件,这很麻烦!我应怎样才能得到键盘输入?
IsDialogMessage(hDlg, &msg)可以吗?如果可以的话又该如何去用?谢谢了!
看看你的Dialog上面有没有Button。
如果有的话,看看焦点是不是在Button上。如果焦点在Button上,当然就不会接受WM_KEYDOWN消息了。
我的程序中把Dialog上面的所有button都去掉,让焦点跑到Dialog上,就可以接受WM_KEYDOWN了。
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_KEYDOWN)
SendMessage(hMainDlg, WM_WINBUTTON,msg.wParam,0) ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
} hwndhwnd(何宗键) :
不行呀!我把默认按钮属性去掉都不行。即使加了以下代码也不行。
case WM_INITDIALOG:
SetFocus(hDlg) ;
能具体说下你的做法吗?
然后在资源里面新建一个dialog。在把默认的OK cancel去掉。
这时候就可以在DialogProc里面接受WM_KEYDOWN消息了。楼上的方法如果行得通的话,也没什么不妥。
那就要去WM_CHAR消息是传到edit控件里的,不是传到对话框上的
是传到每一个控件的内部,例如如果你在对话框上加了一个edit控件,
那WM_CHAR消息是传到edit控件里的,不是传到对话框上的
另外,请问edit控件里的文本又怎样选定的?分行?或者把焦点移到文本最后?
什么意思?
比如在刚打开的对话框是已有一个默认的文本,而我想把这文本成为高亮、好让用户不用再对其删除。分行?
在一个多行的的edit控件里我并不想等到行尾才自动分行,需要光标还在行中间的时候,就把它移到下一行的开始。或者把焦点(光标)移到文本最后?
我想在准备输出到edit控件里的文本,紧接在现存在edit控件里的文本的后面,
SetWindowText()却只把原来的文本复盖掉。谢谢了!另外,有关edit控件的一些具体用法,我还会另开一贴(一贴一个主题)。到时候欢迎两位能跟贴、讨论。
像要选中某个地方就发EM_SETSEL,等,你可以看一下MSDN上,上面都有的