『壹』 MFC之使用 Windows 標准控制項
2)選擇要增加變數的,單擊添加變數按鈕,打開添加變數的對話框:
3)在添加變數對話框中的填上成員變數名以及必要的注釋信息。
4)若要刪除控制項變數,則在類向導對話框的成員變數選項卡中選定要刪除變數的控制項,然後單擊刪除變數按鈕。
1)在工具箱中選擇 「Group Box」 添加分組框。
2)在工具箱中選擇 「Radio Button」 向分組框中添加單選按鈕。
3)將組合框里的第一個單選按鈕的 Group 屬性、Tab stop 屬性和 Auto 屬性都設置為 True;其餘的單選按鈕將 Tab stop 屬性和 Auto 屬性設置為 True 就可以了。
1)在工具箱中選擇 「Group Box」 添加分組框。
2)在工具箱中選擇 「Chick Box」 向分組框添加復選框。
『貳』 MFC的picture控制項的使用
你是想設置背景色吧
直接使用picture控制項添加bmp圖片,不容易實現你描述的功能。
可以通過以下方法解決:
1.添加一個picture控制項ID假定為IDC_S_PIC,調整的你需要的大小,類型原則Frame。
2.在OnPaint函數中添加以下代碼在IDC_S_PIC制定的范圍內添加背景圖片。
voidCBDlg::OnPaint()
{
CPaintDCdc(this);//devicecontextforpainting
CRectrect;
GetDlgItem(IDC_S_PIC)->GetClientRect(&rect);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbmpBackground;
if(bmpBackground.LoadBitmap(IDB_BITMAP1))
{//保證載入圖片成功後再執行以下操作
BITMAPbitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
}
『叄』 MFC 控制項的使用
網上有很多這方面的參考,推薦上這個網站上看看:
http://www.vczx.com/tutorial/mfc/mfc.php
東西挺全的。。
下面是 其中的一小部分:
MFC教程_ 應用程序的退出應用程序的退出
一個Windows應用程序啟動之後,一般是進入消息循環,等待或者處理用戶的輸入,直到用戶關閉應用程序窗口,退出應用程序為止。
例如,用戶按主窗口的關閉按鈕,或者選擇執行系統菜單「關閉」,或者從「文件」菜單選擇執行「退出」,都會導致主窗口被關閉。
當用戶從「文件」菜單選擇執行「退出」時,將發送MFC標准命令消息ID_APP_EXIT。MFC實現了函數CWinApp::OnAppExit()來完成對該命令消息的預設處理。
void CWinApp::OnAppExit()
{
// same as double-clicking on main window close box
ASSERT(m_pMainWnd != NULL);
m_pMainWnd->SendMessage(WM_CLOSE);
}
可以看出,其實現是向主窗口發送WM_CLOSE消息。主窗口處理完WM_CLOSE消息之後,關閉窗口,發送WM_QUIT消息,退出消息循環(見圖5-3),進而退出整個應用程序。
邊框窗口對WM_CLOSE的處理
MFC提供了函數CFrameWnd::OnClose來處理各類邊框窗口的關閉:不僅包括SDI的邊框窗口(從CFrameWnd派生),而且包括MDI的主邊框窗口(從CMDIFrameWnd派生)或者文檔邊框窗口(從CMDIChildWnd派生)的關閉。
該函數的原型如下,流程如圖6-1所示:
void CFrameWnd::OnClose()
從圖6-1中可以看出,它首先判斷是否可以關閉窗口(m_lpfnCloseProc是函數指針類型的成員變數,用於列印預覽等情況下),然後,根據具體情況進行處理:
如果是主窗口被關閉,則關閉程序的所有文檔,銷毀所有窗口,退出程序;
如果不是主窗口被關閉,則是文檔邊框窗口被關閉,又分兩種情況:若該窗口所顯示的文檔被且僅被該窗口顯示,則關閉文檔和文檔窗口並銷毀窗口;若該窗口顯示的文檔還被其他文檔邊框窗口所顯示,則僅僅關閉和銷毀文檔窗口。
下面是處理 WM_CLOSE消息中涉及的一些函數。
BOOL CDocument::SaveModified()
該虛擬函數的預設實現:首先調用IsModifed判斷文檔是否被修改,沒有修改就返回,否則繼續。
當詢問用戶是否保存被修改的文檔時,若用戶表示「cancel」,返回FALSE;若用戶表示「no」,則返回TRUE;若用戶表示「yes」,則存檔失敗返回FALSE,存檔成功返回TRUE。存檔處理首先要得到被保存文件的名稱,然後調用虛擬函數OnSaveDocument完成存檔工作,並使用SetModifidFlag(FALSE)設置文檔為沒有修改。
BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName)
該函數是虛擬函數,用來保存文件。其實現的功能和OpOpenDocument相反,但處理流程類似,描述如下:
根據lpszPathName打開文件pFile;
使用pFile構造一個用於寫入數據的CArchive對象,此對象用來保存數據到文件;
設置滑鼠為時間瓶形狀;
使用Serialize函數完成序列化寫;
完畢,恢復滑鼠的形狀。
CWinApp::SaveAllModified()
CWinApp::CloseAllDocuments(BOOL bEndSession)
這兩個函數都遍歷模板管理器列表,並分別對列表中的模板管理器對象逐個調用CDocManager的同名成員函數:
CDocManager::SaveAllModified()
CDocManager::CloseAllDocuments(BOOL bEndSession)
這兩個函數都遍歷其文檔模板列表,並分別對列表中的模板對象逐個調用CDocTemplate的同名成員函數:
CDocTemplate::SaveAllModified()
CDocTemplate::CloseAllDocuments(BOOL bEndSession)
這兩個函數都遍歷其文檔列表,並分別對列表中的文檔對象逐個調用CDocuemnt的成員函數:
CDocument::SaveModified()
CDocument::OnCloseDocument()
CDocument::SaveModified()
CDocument::OnCloseDocument()
CDocument::SaveModified前面已作了解釋。OnCloseDocument是一個虛擬函數,其流程如圖6-2所示。
通過文檔對象所對應的視,得到所有顯示該文檔的邊框窗口的指針:在SDI程序關閉窗口時,獲取的是主邊框窗口;在MDI程序關閉窗口時,獲取的是MDI子窗口。
然後,關閉並銷毀對應的邊框窗口。
如果文檔對象的 m_bAutoDelete為真,則銷毀文檔對象自身。
窗口的銷毀過程
DestroyWindow
從圖6-1、圖6-2可以看出,銷毀窗口是通過調用DestroyWindow來完成的。DestroyWindow是CWnd類的一個虛擬函數。CWnd實現了該函數,而CMDIChildWnd覆蓋了該函數。
(1)CWnd::DestroyWindow()
主要就是調用::DestroyWindow銷毀m_hWnd(必須非空),同時銷毀其菜單、定時器,以及完成其他清理工作。
::DestroyWindow使將被銷毀的窗口失去激活、失去輸入焦點,並發送WM_DESTROY、WM_NCDESTROY消息到該窗口及其各級子窗口。如果被銷毀的窗口是子窗口且沒有設置WM_NOPARENTNOTFIY風格,則給其父窗口發送WM_PARENTNOFITY消息。
(2)CMDIChildWnd::DestroyWindow()
因為MDI子窗口不能使用::DestroyWindows來銷毀,所以CMdiChildWnd覆蓋了該函數,CMDIChildWnd主要是調用成員函數MDIDestroy給客戶窗口(父窗口)發送消息WM_MDIDESTROY,讓客戶窗口來銷毀自己。
處理WM_DESTROY消息
消息處理函數OnDestroy處理WM_DESTROY消息,CFrameWnd、CMDIChildWnd、CWnd、CView及其派生類(如CEditView等等)、CControlBar等都提供了對該消息的處理函數。這里,主要解釋邊框、文檔邊框、視類的消息處理函數OnDestroy。
CWnd::OnDestroy()
調用預設處理函數Default()。
CFrameWnd::OnDestroy()
首先,銷毀工具欄的窗口;然後,設置菜單為預設菜單;接著,如果要銷毀的是主邊框窗口,則通知HELP程序本應用程序將退出,沒有其他程序使用WINHELP則關閉WINHELP;最後調用CWnd::OnDestroy。
CMDIFrameWnd::OnDestroy()
首先,調整客戶窗口的邊界類型;然後,調用基類CframeWnd的OnDestroy。這時,MDI子窗口的工具欄窗口列表為空,故沒有工具欄窗口可以銷毀。
CView::OnDestroy()
首先,判斷自身是否是邊框窗口的活動視,如果是則調用邊框窗口的SetActivateView使自己失去激活;然後,調用基類CWnd的OnDestroy。
處理WM_NCDESTROY消息
窗口的非客戶區被銷毀時,窗口接收WM_NCDESTROY消息,由OnNcDestroy處理WM_NCDESTROY消息。在MFC中,OnNcDestroy是Windows窗口被銷毀時調用的最後一個成員函數。
CWnd、CView的某些派生類提供了對該消息的處理函數,這里只討論CWnd的實現。
CWnd::OnNcDestroy()
首先判斷當前線程的主窗口是否是該窗口,如果是且模塊非DLL,則發送WM_QUIT消息,使得程序結束;
然後,判斷當前線程的活動窗口是否是該窗口,如果是則設置活動窗口為NULL;
接著,清理Tooltip窗口,調用Default由Windows預設處理WM_NCDESTROY消息,UNSUBCLASS,把窗口句柄和MFC窗口對象分離(Detach);
最後,調用虛擬函數PostNcDestoy。
PostNcDestoy
CWnd、CFrameWnd、CView、CControlBar等都覆蓋了該函數。文檔邊框窗口和邊框窗口都使用CFrameWnd::PostNcDestroy。
CWnd::PostNcDestroy()
MFC預設實現空
void CFrameWnd::PostNcDestroy()
調用delete this銷毀自身這個MFC對象。
void CView::PostNcDestroy()
調用delete this銷毀自身這個MFC對象。
析構函數
delete this導致析構函數的調用。需要提到的是CFrameWnd和CView的析構函數。
CFrameWnd::~CFrameWnd()
邊框窗口在創建時,把自身加入到模塊-線程狀態的邊框窗口列表m_frameList中。現在,從列表中移走該窗口對象。
必要的話,刪除m_phWndDisable數組。
CView::~CView()
在視創建時,把自身加入到文檔對象的視列表中。現在,從列表中移走該視對象。
應用程序調用CloseAllDocument關閉文檔時。參數為FALSE,它實際上並沒有把視從列表中清除,而最後的清除是由析構函數來完成的。
至此,邊框窗口關閉的過程討論完畢。下面,結合具體情況——SDI窗口的關閉、MDI主窗口的關閉、MDI子窗口的關閉——描述對WM_CLOSE消息的處理。
SDI窗口、MDI主、子窗口的關閉
參考圖6-1分析SDI窗口、MDI主、子窗口的關閉流程。
SDI窗口的關閉
在這種情況下,主窗口將被關閉。首先,關閉應用程序的文檔對象。文檔對象的虛擬函數OnCloseDocument調用時銷毀了主窗口(Windows窗口和MFC窗口對象),同時也導致視、工具條窗口的銷毀。主窗口銷毀後,應用程序的主窗口對象為空,故發送WM_QUIT消息結束程序。
MDI主窗口的關閉
首先,關閉應用程序的所有文檔對象。文檔對象的OnCloseDocument函數關閉文檔時,將銷毀文檔對象對應的文檔邊框窗口和它的視窗口。這樣,所有的MDI子窗口(包括其子窗口視)被銷毀,但應用程序的主窗口還在。接著,調用DestroyWindow成員函數銷毀主窗口自身,DestroyWindow發現被銷毀的是應用程序的主窗口,於是發送WM_QUIT消息結束程序。
MDI子窗口(文檔邊框窗口)的關閉
在這種情況下,被關閉的不是主窗口。判斷與該文檔邊框窗口對應的文檔對象是否還被其他一個或者多個文檔邊框窗口使用,如果是,則僅僅銷毀該文檔邊框窗口(包括其子窗口視);否則,關閉文檔,文檔對象的OnCloseDocument將銷毀該文檔邊框窗口(包括其子窗口視)。
上一章 回目錄 下一章
『肆』 MFC列表控制項的使用(MFC點擊按鈕模擬滑鼠點擊)
在按鈕的OnLbuttonDown函數中,把List中的單擊實現拷貝過來就可以了
『伍』 MFC中怎麼使用自定義控制項
資源編輯器里你照樣拖,在頭文件里包含你的CMyButton.h頭文件,用你自己的類定義一個成員變數,並在實現文件中將這個變數和資源中的ID對應起來
以CButtonST為例
在.h中包含CButtonST類頭文件,並定義一個成員變數
CButtonST m_btnTest;
在.CPP文件中將成員變數和資源中的控制項關聯
void CXXXDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BTN_TEST, m_btnTest);
}
『陸』 MFC怎麼調用ActiveX控制項
1:使用project-->Add to Project-->Components and Controls, 然後選擇要加入的ocx或者dll,系統會自動生成.cpp和.h文件.並自動加入AfxEnableControlContainer(),這樣就可以使用了.
2:由於activeX一般都有界面,所以可以在dialog裡面插入控制項的方式來使用,該方式是最簡單的一種。創建一個dialog,然後點擊右鍵選擇Insert ActiveX Control,在控制項庫裡面找到剛才注冊的控制項,這時在Controls(按鈕欄)裡面會出現一個ocx的按鈕,可以直接拖進去使用。這時MFC會自動產生一個類,就是包含該控制項的類(CActiveXTest),同時在InitInstance()方法裡面添加控制項初始化函數AfxEnableControlContainer();這樣就可以直接在dialog使用控制項的方法了。譬如定義ocx按鈕的名字為actx,則直接調用
『柒』 C++中MFC的控制項怎麼使用
創建MFC工程後,側邊欄的"工具箱"中就會有各種工具了,拖到這個工程對話框中,執行程序,控制項就可以顯示了,至於控制項的事件,需要自己添加
『捌』 VC6.0中基於對話框的MFC EXE中的Tab Control控制項如何使用
這是標簽控制項:控制項添加標簽
為標簽控制項添加標簽需要使用InsertItem方法,該方法用於向標簽控制項中添加標簽。語法如下:
BOOL
InsertItem(
int
nItem,
TCITEM*
pTabCtrlItem
);
BOOL
InsertItem(
int
nItem,
LPCTSTR
lpszItem
);
BOOL
InsertItem(
int
nItem,
LPCTSTR
lpszItem,
int
nImage
);
BOOL
InsertItem(
UINT
nMask,
int
nItem,
LPCTSTR
lpszItem,
int
nImage,
LPARAM
lParam
);
參數說明如下。
l
nMask:確定哪一項標簽信息可用。
l
nItem:標識新的標簽索引。
l
pTabCtrlItem:是TCITEM結構指針,TCITEM結構中包含了標簽的詳細信息。
l
lpszItem:標識被插入項的指針。
l
nImage:標識圖像索引。
l
lParam:用於設置關聯標簽的附加信息。
我這可能講得不夠詳細,你可以到網路里搜索一下標簽控制項,會得到很多資料