首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

急求帮助,困惑了好多天,该怎么处理

2012-06-06 
急求帮助,困惑了好多天第一个问题是GetDlgItem(IDC_EDIT_SEND)-Invalidate()GetDlgItem(IDC_EDIT_SEND)-

急求帮助,困惑了好多天
第一个问题是GetDlgItem(IDC_EDIT_SEND)->Invalidate();GetDlgItem(IDC_EDIT_SEND)->UpdateWindow(); 为什么我通过这个编辑框控件对象先调用Invalidate()函数再调用UpdateWindow()函数 却没有清除编辑框控件的文本内容。
第二个问题是我想是这个控件具有输入焦点,我通过该控件对象调用SetFocus函数 后,为什么这个控件没有输入焦点。

请大家帮帮忙忙,我实在不知道,希望大家帮我解答迷惑

[解决办法]
第一个问题,Invalidate();和UpdateWindow(); 方法都没有清除控件内容的功能,都是会给指定窗口发送WM_PAINT消息的。你可以用SetDlgItemText方法,该方法无需刷新窗口的。

第二个问题,你的处理是不是点击某个按钮,让指定的控件获取焦点,如果说是的话,这样的话会有问题,你本身鼠标下去会有多个消息,在DOWN的时候,你的控件获取了焦点,但当点击UP的时候,焦点我想应该又回到了你的按钮这边了。
具体使用MSDN有说明使用方法,下附。
另外一种是按某键盘的快捷键时,可以不发送消息,直接用的方法是可行的。

MSDN:
Do not call SetFocus to change a control's focus in a dialog window, except when handling the WM_INITDIALOG message. 
To explicitly set the focus to a dialog's control call SendMessage(hDialog, WM_NEXTDLGCTL, (WPARAM)hwndCtrl, TRUE). The WM_NEXTDLGCTL message notifies the dialog manager that the focus has changed.

[解决办法]
1、SetDlgItemText().
2、过程中设置焦点用SetFocus,初始化时你可以在资源视图中直接排列你的控件顺序的。CTRL+D

热点排行