[英]MFC: How to catch set focus of each control of dialog in one function
[英]How to set control focus inside an MFC custom control
專家!
我正在使用一個繼承CWnd
的類,以便使用水平滾動條使內容可見
我要創建的控件如下所示:
但是,我有一些問題,還有一個問題
當按鈕獲得焦點時,它將變為藍色。 如果按下另一個按鈕,則接收到現有焦點的按鈕應處於未聚焦狀態。
該按鈕不會釋放焦點,如第二張圖片所示。
但是,上述問題是在Dialog中而不是在SDI中實現時發生的。
我需要幫助解決這個問題。
m_ScrollWnd.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 1234);
BOOL CScrollWnd::Create(DWORD dwStyle, CRect &rect, CWnd *pParent, UINT nID)
{
dwStyle |= ((WS_HSCROLL) );
return CWnd::Create(CScrollWnd::IID, nullptr, dwStyle, rect, pParent, nID);
}
m_Button3.Create(_T("Hello3"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 0, 0), this, 1238);
所謂的“默認按鈕處理”是通過名為IsDialogMessage
的函數完成的。
控制它的最簡單方法是使父控件成為一個從CDialog
的窗口,或者如果它是一個從CFormView
派生的視圖。 MFC將在適當的PreTranslateMessage
處理程序中為您處理所有這一切。
如果要自己執行此操作,則可以插入自己的PreTranslateMessage
處理程序並使用IsDialogMessage
。 CWnd
類還具有一個名為CWnd::PreTranslateInput
的預定義實現。
因此,這可能就足夠了:
BOOL CYourParentClass::PreTranslateMessage(MSG* pMsg)
{
// allow standard processing
if (__super::PreTranslateMessage(pMsg))
return TRUE;
return PreTranslateInput(pMsg);
}
從我的角度來看,使用CFormView
/ CDialog
是更好的方法,因為還解決了其他“有關對話框的問題”。 包括放松,獲得關注和激活...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.