c++ 筆記003 MFC增加一個Button按鈕
阿新 • • 發佈:2019-02-21
private nor 通過 rac ndt 矩形 checkbox class 工具
一 在CMainFrame的OnCreate()函數中創建Button
CMainFrame生成了一個窗口,它相當於一塊畫布,要畫一個東西,應該先有一個畫布。CMainFrame何時生成了畫布?當函數調用:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)這個函數時,它是一個用來響應WM_CREATE消息的函數。
CButton btn_ok; //定義在類外,它是一個全局的了 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { //首先調用基類的OnCreate()if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //創建工具條,屬於客戶區的 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("未能創建工具欄\n"); return -1; // 未能創建 } //創建狀態欄 if (!m_wndStatusBar.Create(this)) { TRACE0("未能創建狀態欄\n"); return -1; // 未能創建 } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // TODO: 如果不需要可停靠工具欄,則刪除這三行 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); //至此畫布(CMainFrame)創建好了 //如何創建?通過CButton類,通過CButton的構造函數,手動創建 //CButton btnOK(LPCTSTR lpszCaption, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID); //參數1: 按鈕上顯示的文本,比如"確定","取消" //參數2: 按鈕外觀及類型,通過"|"將多種樣式組合使用 //參數3: 按鈕所在的位置及按鈕顯示所需要的一塊矩形區域 //參數4: 這個子控件按鈕是屬於哪個窗體的(一個控件本身就是一個窗體,繼承自CWND類) //參數5: 按鈕的身份標識,不要重復 //由於需要一個矩形框,先生成這個矩形框對象 RECT rect; rect.left = 5; rect.right = 85; rect.top = 5; rect.bottom = 64; //CButton btn_ok; //定義在方法方法內的,它是一個局部的 btn_ok.Create(L"確定", WS_CHILD | BS_PUSHBUTTON, rect, this, 0x3355); //創建Button //WS_CHILD:表示子窗體 BS_PUSHBUTTON:表示按下的樣子 //this表示調用該方法的對象,哪一個對象調用了該方法,它就指誰 btn_ok.ShowWindow(SW_SHOWNORMAL); //正常顯示,不調用它的成員方法則不顯示 //至此按鈕創建完成,可以運行程序了 //程序運行後並未顯示按鈕,原因是CButton是一個局部變量,當OnCreate()執行完成,就銷毀了 //要讓它活得長久點,需要提升它的權限,需要將它定義為一個全局的(生命伴隨程序運行始末)或者是CMainFrame類的一個成員 return 0; }
在CMainFrame的OnCreate()函數中,一句話創建一個按鈕並顯示(WS_VISIBLE)出來
btn_Show.Create(L"確定1",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,RECT(90,5,170,64),this,3356);
二 在View類中添加一個按鈕
2.1 先給View類創建一個private: CButton變量 btnViewOK (也可以在xxxView.h頭文件中 添加:
private:CButton btnViewOK;
)
2.2 剛生成的xxxxView類沒有OnCreate()函數,怎麽辦?
類視圖->xxxxView類上->右鍵->類向導->彈處如下界面切換到消息
int CMFCApplication3View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您專用的創建代碼 btnViewOK.Create(L"View類的Button", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, CRect(90, 5, 250, 64), this, 3357);
//如果要把該按鈕放在CMainFrame框架類中,則把this換成:GetParent() 即可,此時位置是相對客戶區的位置,而不是相對View的位置 return 0; }
效果如下:
在View類的 xxxxView.h頭文件中定義如下按鈕
private: CButton btnViewOK; CButton btnAutoRadio; CButton btnCheckBox; CButton btnState3CheckBox;
在xxxxView.cpp的OnCreate()中增加代碼:
int CMFCApplication3View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您專用的創建代碼 btnViewOK.Create(L"View類的Button", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, CRect(10, 5, 150, 65), this, 3357); btnAutoRadio.Create(L"V_單選Button", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, CRect(10, 70, 150, 130), this, 3358); btnCheckBox.Create(L"V_復選Button", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, CRect(10, 135, 150, 200), this, 3359); btnState3CheckBox.Create(L"V_3態復選Button", WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, CRect(10, 205, 150, 265), this, 3360); return 0; }
運行效果如圖:
c++ 筆記003 MFC增加一個Button按鈕