请问在SDK对话框过程函数中如何获得键盘输入?我没有用CreateWindow()而是直接用函数 
CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)DlgProc);
生成对话框其中DlgProc()为对话框过程,但是它并不接收WM_KEYDOWN消息;
另外,我不愿意生成.dlg文件,这很麻烦!我应怎样才能得到键盘输入?
IsDialogMessage(hDlg, &msg)可以吗?如果可以的话又该如何去用?谢谢了!

解决方案 »

  1.   

    研究了一下。
    看看你的Dialog上面有没有Button。
    如果有的话,看看焦点是不是在Button上。如果焦点在Button上,当然就不会接受WM_KEYDOWN消息了。
    我的程序中把Dialog上面的所有button都去掉,让焦点跑到Dialog上,就可以接受WM_KEYDOWN了。
      

  2.   

    我这样实现不知有没有不妥之处?
    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)  ;
    能具体说下你的做法吗?
      

  3.   

    我的做法就是在winmain里面写了一句CreateDialog()。
    然后在资源里面新建一个dialog。在把默认的OK cancel去掉。
    这时候就可以在DialogProc里面接受WM_KEYDOWN消息了。楼上的方法如果行得通的话,也没什么不妥。
      

  4.   

    在每一个控件是内部,例如如果你在对话框上加了一个edit控件,
    那就要去WM_CHAR消息是传到edit控件里的,不是传到对话框上的
      

  5.   


    是传到每一个控件的内部,例如如果你在对话框上加了一个edit控件,
    那WM_CHAR消息是传到edit控件里的,不是传到对话框上的
      

  6.   

    把WM_CHAR消息是传到edit控件里?是直接传过去吗?问题是DialogProc()能否收到该消息?DialogProc()有怎样的消息限制?
     另外,请问edit控件里的文本又怎样选定的?分行?或者把焦点移到文本最后?
      

  7.   

    DialogProc不能收到的请问edit控件里的文本又怎样选定的?分行?或者把焦点移到文本最后?
    什么意思?
      

  8.   

    请问edit控件里的文本又怎样选定的?
       比如在刚打开的对话框是已有一个默认的文本,而我想把这文本成为高亮、好让用户不用再对其删除。分行?
       在一个多行的的edit控件里我并不想等到行尾才自动分行,需要光标还在行中间的时候,就把它移到下一行的开始。或者把焦点(光标)移到文本最后?
       我想在准备输出到edit控件里的文本,紧接在现存在edit控件里的文本的后面,
    SetWindowText()却只把原来的文本复盖掉。谢谢了!另外,有关edit控件的一些具体用法,我还会另开一贴(一贴一个主题)。到时候欢迎两位能跟贴、讨论。
      

  9.   

    向edit控件发送相映的消息
    像要选中某个地方就发EM_SETSEL,等,你可以看一下MSDN上,上面都有的