【MFC系列-第14天】MFC核心类库的成员介绍(记事本快捷键)

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"));
}

Guess you like

Origin blog.csdn.net/wlwdecs_dn/article/details/121449370