四
添加一个CButton的例子
调用CButton::Create()来构造一个CButton对象
//Creates the Windows button control and attaches it to the CButton object: virtual BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, //Specifies the button control's parent window, usually a CDialog. It must not be NULL. UINT nID );
演示在CMainFrame类和CTestView类添加CButton的例子
1.在CMainFrame类中添加Button
添加到 nt CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 中
代码:
//MainFrm.h
//添加成员变量m_btn,用于保存窗口按钮句柄 class CMainFrame : public CFrameWnd { //...... virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //...... // 生成的消息映射函数 protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP() private: CButton m_btn; //添加全局变量CButton m_btn , 用来保存窗口按键句柄 };
//MainFrm.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //...... m_btn.Create("聚元", WS_CHILD | BS_PUSHBUTTON ,CRect(0,0,100,100),this,123); //Create()返回的窗口按钮句柄保存到了m_btn中, //Create()中的参数this指针指示了添加的button放置的位置,在当前的CMainFrame窗体中. m_btn.ShowWindow(SW_SHOWNORMAL); //m_btn.UpdateWindow(); return 0; }
2.在CTestView类中添加CButton
//TestView.h
//添加成员变量m_btn,用于保存窗口按钮句柄 class CTestView : public CView { //...... // 生成的消息映射函数 protected: DECLARE_MESSAGE_MAP() private: CButton m_btn; //添加全局变量CButton m_btn , 用来保存窗口按键句柄 };
//TestView.cpp
//添加int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)函数,用于消息处理 int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_btn.Create("聚元", WS_CHILD | BS_PUSHBUTTON ,CRect(0,0,100,100),this,123); //Create()返回的窗口按钮句柄保存到了m_btn中, //Create()中的参数this指针指示了添加的button放置的位置,在当前的CMainFrame窗体中. m_btn.ShowWindow(SW_SHOWNORMAL); //m_btn.UpdateWindow(); return 0; }
3.添加了控件,让它立即显示:
修改TestView.cpp中Create()中的DWORD dwStyle参数,添加WS_VISIBLE
代码:
... m_btn.Create("聚元", WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON ,CRect(0,0,100,100),this,123); //Create()返回的窗口按钮句柄保存到了m_btn中, //Create()中的参数this指针指示了添加的button放置的位置,在当前的CMainFrame窗体中. //m_btn.ShowWindow(SW_SHOWNORMAL); //m_btn.UpdateWindow(); ...
4.关于CButton::Create()函数中的CWnd* pParentWnd代表了添加的控件放置的窗口指针
pParentWnd指向哪一个窗口,那么这个控件就添加到哪一个窗口,无论它是CMainFrame,还是CTestView
如果在 CTestView中(在文件TestView.cpp中)添加CButton:
this代表CTestView本身;
HWND GetParent( )代表CTestView的父窗口CMainFrame.
代码片断:
... m_btn.Create("聚元", WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON ,CRect(0,0,100,100),GetParent(),123); ...