CButton是最基本的子窗口类之一,我们必须一步一步学会如何使用它,我将会通过几个小代码来分别演示: 初试一:使用BS_PUSHBUTTON的CButton. CButtonDemo.h #pragma once #define IDC_BUTTON 40000 class CMyApp : public CWinApp { virtual BOOL InitInstance(); }; class CMainWindow : public CWnd { public: CMainWindow(); protected: int m_cxChar, m_cyChar; CButton m_wndPushButton; void PostNcDestroy(); int OnCreate(LPCREATESTRUCT lpCreateStruct); void OnSize(UINT nType, int cx, int cy); void OnButtonClicked(); DECLARE_MESSAGE_MAP() }; CButtonDemo.cpp #include <afxwin.h> #include "CButtonDemo.h" CMyApp myApp; BOOL CMyApp::InitInstance() { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } BEGIN_MESSAGE_MAP(CMainWindow, CWnd) ON_WM_CREATE() ON_WM_SIZE() ON_BN_CLICKED(IDC_BUTTON, OnButtonClicked) END_MESSAGE_MAP() CMainWindow::CMainWindow() { CString strWndClass = AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), AfxGetApp()->LoadStandardIcon(IDI_WINLOGO)); CreateEx(0, strWndClass, _T("just play CButton"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL); } int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) { if(CWnd::OnCreate(lpCreateStruct) == -1) return -1; m_wndPushButton.Create(_T("初试CButton类"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 0, 0), this, IDC_BUTTON); return 0; } void CMainWindow::OnSize(UINT nType, int cx, int cy) { CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); m_cxChar = tm.tmAveCharWidth; m_cyChar = tm.tmHeight; int buttonWidth, buttonHeight; buttonHeight = 7 * m_cyChar / 4; buttonWidth = 5 * buttonHeight; CRect rcButton(cx / 2 - buttonWidth / 2, cy / 2 - buttonHeight / 2, cx / 2 + buttonWidth / 2, cy / 2 + buttonHeight / 2); m_wndPushButton.MoveWindow(&rcButton); } void CMainWindow::OnButtonClicked() { MessageBox(_T("初试CButton类!!!")); } void CMainWindow::PostNcDestroy() { delete this; }