您的位置:首页 > 编程语言 > C语言/C++

VC++ 之MFC内部机制四

2009-03-02 23:33 211 查看


添加一个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);
...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: