14.1 对话框快捷键的设置和加载
a) 插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
b) 在对话框头文件中声明
HACCEL m_hAccel;
c) 在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
d) 然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccelTable)
{
if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
14.2 CWnd派生类
a)控件分支:CEdit、CListCtrl、CComboBox、CTreeCtrl、CButton
b)CDialog分支:CColorDialog、CFindReplaceDialog、CFileDialog、CFontDialog
c)条分支:CToolBar、CStatusBar、CRebar
d)框架与视图:CFrameWnd、CMDIFrameWnd和CMDIChildWnd、CEditView、CListView、CHtmlView
14.3 CWnd类的成员
核心成员变量是HWND m_hWnd
:所有成员函数几乎都是围绕这个成员变量在工作;
a) DestroyWindow:摧毁
-
1、
EndDialog(-1);
-
2、
CWnd* pWnd = GetDlgItem(IDOK);
pWnd->DestroyWindow();
-
3、
pWnd->ShowWindow(SW_HIDE);
-
4、其他进程:
CWnd* pWnd = FindWindow(_T("Notepad"), NULL);
pWnd ->DestroyWindow();
pWnd->SendMessage(WM_CLOSE);
-
5、Create:创建
CreateEx:带风格创建,比如:下陷风格等 -
6、operator HWND:将对象自动转为句柄(m_hWnd)
if (!m_ok)
{m_ok.Create(_T("Button"), _T("确定"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_TABSTOP, CRect(10, 50, 155, 69), this, 10088);CFont* pFont = GetFont();m_ok.SetFont(pFont);
}
- 7、GetSafeHwnd:(推荐)安全地获取一个对象内的句柄
void CTestWDlg::OnBnClickedGetSafe()
{CWnd* pWnd = GetDlgItem(IDOK);HWND hWnd = pWnd->GetSafeHwnd(); //即使IDOK按钮销毁了,程序也不会崩溃
}
- 8、FromHandle:获取一个与句柄关联的CWnd对象地址,FromHandle与GetSafeHwnd是反函数(如果没有关联将生成临时对象与句柄关联)
void CTestWDlg::OnBnClickedFromHandle()
{// FromHandle与GetSafeHwnd是反函数HWND h = ::GetDlgItem(m_hWnd, IDOK);CWnd* pOK = CWnd::FromHandle(h);pOK->SetWindowText(_T("OK"));
}