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

关于CWnd:SetFocus的一点有关问题

2012-08-09 
关于CWnd::SetFocus的一点问题C/C++ codeBOOL CDlgBillInfo::OnInitDialog(){CDialog::OnInitDialog()/*D

关于CWnd::SetFocus的一点问题

C/C++ code
BOOL CDlgBillInfo::OnInitDialog(){    CDialog::OnInitDialog();                  /*  DoSomething  */    GetDlgItem( IDC_EDIT_SHBILLNO )->SetFocus();    return FALSE;          //除非将焦点设置到控件,否则返回TRUE}


将OnInitDialog的返回值设置成FALSE之后,在这个对话框初始化的时候,是能够将焦点设置到指定的控件上。但是,有这么一个问题:这个窗口是一个父窗口,在打开它的一个子窗口时,父窗口没有关闭,而后子窗口通过发消息的方式,让父窗口的某个控件获得焦点,却一直失效。几段小代码如下:
打开子窗口:
C/C++ code
void CDlgBillInfo::OnBnClickedButtonQuery(){    CDlgCustom dlg;    dlg.m_customHwnd = this->m_hWnd;    dlg.DoModal();}

子窗口处理完之后,给父窗口发送消息:
C/C++ code
void CDlgCustom::OnBnClickedButtonOkCustom(){         /* DoSomething */    SendMessage( WM_CLOSE, 0, 0 );    ::SendMessage( m_customHwnd, WM_CUSTOMTOINFO_MESSAGE, 0, 0 );}

父窗口接收消息,并进行相应的处理:
C/C++ code
LRESULT CDlgBillInfo::GetCustomToInfoMessage(WPARAM wParam, LPARAM lParam){         /*  DoSomething */    GetDlgItem( IDC_EDIT_SHBILLNO )->SetFocus();    return 0;}


父窗口接收消息时,原本是想将焦点设置到IDC_EDIT_SHBILLNO这个ID对应的控件上,但是却一直失效,看SetFocus()的返回值是空的。这是什么导致的呢?

[解决办法]
别发消息了,直接加上下面这句话就行了
如果分情况设置焦点,就判断dlg.DoModal();的返回值
C/C++ code
void CDlgBillInfo::OnBnClickedButtonQuery(){    CDlgCustom dlg;    dlg.m_customHwnd = this->m_hWnd;    dlg.DoModal();    [color=#FF0000]GetDlgItem( IDC_EDIT_SHBILLNO )->SetFocus();[/color]} 

热点排行