问题描述如下:
  对话框有三个控件,一个Edit,一个TreeView,一个ListView.我希望在Edit里可以输入一些命令,来修改文档中的数据.在输入命令后,按回车键,开始解析命令,并进行处理代码如下:                switch( Id )
{
case IDOK:
{
GetDlgItemText( hwndDlg, IDC_EDIT, comline, 299 );
Command* com = Processor.ProcessComLine( comline );
if( !com )
{
MessageBox( hwndDlg, Processor.GetErrorString().c_str(), "错误",
MB_OK );
}else{
Dlg.GetCurDoc()->AddCommand( com );
SetDlgItemText( hwndDlg, IDC_EDIT, "" ); Dlg.ListViewAddItem( doc->GetDoc()->GetRateBase()->GetManager()
->GetRes( Processor.GetCommandInfo()) );
}
}
break;
在Edit控件中按ENTER键时,对话框会产生一个WM_COMMAND消息,这段代码的确也可以达到预期的效果。但是,并非只是在按回车时,才会产生这样的消息,我在编辑TreeView控件的里的结点的Text时,居然也会产生一个ID 为 IDOK的WM_COMMAND消息。 ListView在编辑时也会产生同样的消息。请问这是为什么?

解决方案 »

  1.   

    因为ListCtrl,TreeCtrl编辑结点的时候,那里确实动态的创建了一个Edit。
      

  2.   

    IDOK貌似是vc对话框中确定按钮的值,你在pretranslatemessage这个函数里截获回车消息试一下呢?
      

  3.   

    对,每次编辑都会动态创建一个edit!!!
      

  4.   

    创建Edit什么的都没有问题,但是为啥他的ID是1呀,也就是IDOK的值.
      

  5.   

    而且,他创建的Edit居然不是ListView或TreeView的子窗口,却是对话框的子窗口,这也太怪异了.
      

  6.   

    你每次listctrl,treectrl编辑完成以后都是按回车的吧,回车就会发送IDOK
      

  7.   

    按不按回车都会发送IDOK这样的消息
      

  8.   

    判断一下message.hwnd是哪个窗口,来进行区分