亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? visual c++ mfc +=+

?? VISUAL C++ MFC 簡明教程 VISUAL C++ MFC 簡明教程 VISUAL C++ MFC 簡明教程
??
?? 第 1 頁 / 共 5 頁
字號:
// The constructor for the window class
CButtonWindow::CButtonWindow()
{ 
	CRect r;
	// Create the window itself
	Create(NULL, 
		"CButton Tests", 
		WS_OVERLAPPEDWINDOW,
		CRect(0,0,200,200));
	// Get the size of the client rectangle
	GetClientRect(&r);
	r.InflateRect(-20,-20);
	// Create a button
	button = new CButton();
	button->Create("Push me",
		WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
		r,
		this,
		IDB_BUTTON);
}
主要修改了三個方面: 
1. CButtonWindow的類說明現在包含了一個新的成員函數和一個新的表示消息映射的宏。HandleButton函數是正常的C++函數,它通過afx_msg標簽確定為消息處理函數。該函數需要一些特殊的約束,例如,它必須是void型并且它不能接收任何參數。DECLARE_MESSAGE_MAP宏建立了消息映射。函數和宏都必須是public型的。
2. HandleButton函數作為成員函數以同樣的方式來建立。在該函數中,我們調用了Windows API中的MessageBeep函數。
3. 用宏來建立消息映射。在代碼中,你可以看見BEGIN_MESSAGE_MAP宏接收兩各參數。第一個指定了使用消息映射的類的名稱。第二個是基類。然后是ON_BN_CLICKED宏,接受兩個參數控制的ID和該ID發送命令消息時所調用的函數。最后,消息映射用END_MESSAGE_MAP來結束。
當用戶單擊按鈕時,它向其包含該按鈕的父窗口發送了一個包含其ID的命令消息。那是按鈕的缺省行為,這就是該代碼工作的原因。按鈕向其父窗口發送消息,是因為它是子窗口。父窗口截取該消息并用消息映射來確定所要調用的函數。MFC來安排,只要指定的消息一出現,相應的函數就會被調用。
ON_BN_CLICKED消息是CButton發送的唯一感興趣的消息。它等同于CWnd中的ON_COMMAND消息,只是一個更簡單方便的同義詞而已。

改變大小的消息
在上面的代碼中,由于有了消息映射,從CFrameWnd繼承來的應用程序窗口認出按鈕有按鈕產生的單擊消息并響應之。加入消息映射的ON_BN_CLICKED宏指定了按鈕的ID和窗口在接收到來自按鈕的命令消息時應調用的函數。因為只要用戶單擊了按鈕,按鈕就會自動把其ID發送父窗口,這樣才能允許代碼正確地處理按鈕事件。
作為該應用程序的主窗口的框架窗口自己也有傳遞消息的能力。大約有100不同的消息可用,它們都是從CWnd類繼承來的。從MFC幫助文件中瀏覽CWnd類的成員函數,你就會看到所有的這些消息。查看所有以“On”開頭的成員函數。
你可能已經注意到了,至今為止所有的代碼都不能很好地處理尺寸變化。當窗口變化大小時,窗口的框架會做相應的調整,但是窗口中調的內容仍原處不動。可以通過處理尺寸變化的事件來更好的處理這一問題。任何窗口發送的消息之一就是變尺寸消息。該消息是當改變形狀時發出的。我們可以使用該消息來控制框架中子窗口的大小,如下所示: 
// button3.cpp
#include <afxwin.h>
#define IDB_BUTTON 100
// Declare the application class
class CButtonApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};
// Create an instance of the application class
CButtonApp ButtonApp;  
// Declare the main window class
class CButtonWindow : public CFrameWnd
{ 
	CButton *button;
public:
	CButtonWindow();
	afx_msg void HandleButton();
	afx_msg void OnSize(UINT, int, int);
	DECLARE_MESSAGE_MAP()	 
};
// A message handler function
void CButtonWindow::HandleButton()
{
	MessageBeep(-1);
}
// A message handler function
void CButtonWindow::OnSize(UINT nType, int cx,
	int cy)
{
	CRect r;
	GetClientRect(&r);
	r.InflateRect(-20,-20);
	button->MoveWindow(r);
}
// The message map
BEGIN_MESSAGE_MAP(CButtonWindow, CFrameWnd)
	ON_BN_CLICKED(IDB_BUTTON, HandleButton)
	ON_WM_SIZE()
END_MESSAGE_MAP()
// The InitInstance function is called once
// when the application first executes
BOOL CButtonApp::InitInstance()
{
	m_pMainWnd = new CButtonWindow();
	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}
// The constructor for the window class
CButtonWindow::CButtonWindow()
{ 
	CRect r;
	// Create the window itself
	Create(NULL, 
		"CButton Tests", 
		WS_OVERLAPPEDWINDOW,
		CRect(0,0,200,200));
	// Get the size of the client rectangle
	GetClientRect(&r);
	r.InflateRect(-20,-20);
	
	// Create a button
	button = new CButton();
	button->Create("Push me",
		WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
		r,
		this,
		IDB_BUTTON);
}
為了理解上面的代碼,從窗口的消息映射開始。你會發現入口ON_WM_SIZE。該入口表示消息映射是對來自CButtonWindow對象的變尺寸消息發生響應。變尺寸消息是當用戶改變窗口的大小時產生的。該消息來自窗口本身,而不是作為ON_COMMAND消息由按鈕向其父窗口發送的。這是因為窗口框架不是子窗口。
要注意的是消息映射中的ON_WM_SIZE入口沒有參數。你在MFC文檔中CWnd類,消息映射中的ON_WM_SIZE入口總是調用OnSize函數,并且該函數必須接收三個參數。OnSize函數必須是消息映射所屬類的成員函數,并且該函數必須用afx_msg來說明(正如上面在CButtonWindow的定義中所見到的一樣)。
如果你查看MFC文檔,就會發現CWnd中有近100名為“On...”的函數。CWnd::OnSize是其中之一。所有這些函數都在消息映射中有形如ON_WM_對應的標簽。例如,ON_WM_SIZE對應OnSize。ON_WM_入口不接收任何參數,如ON_BN_CLICKED一樣。參數是假設的并自動傳遞給相應的如OnSize的“On...”函數。
重復一遍,因為它很重要: OnSize函數總是與消息映射中的ON_WM_SIZE入口想對應。你必須命名處理函數OnSize, 并且它必須接收三個參數。不同的函數的參數會有所不同。
上面的代碼中在OnSize函數自身的內部,有三行代碼修改了按鈕在窗口中的尺寸。你可以在該函數中輸入任何你想要的代碼。
調用GetClientRect是為了恢復窗口用戶區域的新尺寸。該矩形會被縮小,并調用按鈕的MoveWindow函數。MoveWindow是從CWnd繼承來的,改變尺寸和移動子窗口是在一步完成的。
當你執行上面改變窗口大小的程序時,你就會發現按鈕自己能正確地改變大小。在代碼中,變尺寸事件他國消息映射中的OnSize函數而產生一調用,它調用MoveWindow函數來改變按鈕的大小。

窗口消息
查看MFC文檔,你可以看到主窗口處理的各種各樣的CWnd消息。有些與我們上面介紹的類似。例如,ON_WM_MOVE消息是當用戶移動窗口時發送的消息,ON_WM_PAINT消息是當窗口的任何部分需要重畫時發出的。至今為止,我們的所有程序,重畫工作都是自動完成的,因為是控制自己來負責其外觀。如果你自己使用GDI命令來在用戶區域中繪制,應用程序就應負責重畫工作。因此ON_WM_PAINT就變得重要了。
還有一些發送給窗口的事件消息更深奧。例如,你可以使用ON_WM_TIMER消息與SetTimer函數來使接收預先設置的時間間隔。下面的代碼給出了該過程。當你運行該代碼時,程序會每隔1秒鐘鳴笛一聲。你可以用其它更有用的功能來代替鳴笛。
// button4.cpp
#include <afxwin.h>
#define IDB_BUTTON 100
#define IDT_TIMER1 200
// Declare the application class
class CButtonApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};
// Create an instance of the application class
CButtonApp ButtonApp;  
// Declare the main window class
class CButtonWindow : public CFrameWnd
{ 
	CButton *button;
public:
	CButtonWindow();
	afx_msg void HandleButton();
	afx_msg void OnSize(UINT, int, int);
	afx_msg void OnTimer(UINT);
	DECLARE_MESSAGE_MAP()	 
};
// A message handler function
void CButtonWindow::HandleButton()
{
	MessageBeep(-1);
}
// A message handler function
void CButtonWindow::OnSize(UINT nType, int cx, 
	int cy)
{
	CRect r;
	GetClientRect(&r);
	r.InflateRect(-20,-20);
	button->MoveWindow(r);
}
// A message handler function
void CButtonWindow::OnTimer(UINT id)
{
	MessageBeep(-1);
}
// Th

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片一区二区三区| 亚洲欧美一区二区久久| 日韩成人免费看| 日韩精品中文字幕一区二区三区 | 欧美色国产精品| 亚洲自拍偷拍九九九| 欧美三级三级三级| 青青草91视频| 欧美一区日本一区韩国一区| 久久se精品一区二区| 国产欧美日韩在线| 色哟哟日韩精品| 免费成人在线观看视频| 久久精品一区二区三区不卡牛牛 | 91色porny| 亚洲第一久久影院| 精品日韩欧美一区二区| 国产麻豆91精品| 亚洲欧美在线视频| 欧美日韩在线免费视频| 国产一区二区三区日韩| 综合久久综合久久| 日韩欧美一级精品久久| av中文字幕在线不卡| 视频一区在线播放| 欧美激情一区二区三区四区| 欧美视频自拍偷拍| 国产在线视频一区二区三区| 亚洲欧美福利一区二区| 日韩精品一区国产麻豆| 99免费精品在线| 奇米影视7777精品一区二区| 国产精品久久毛片av大全日韩| 蜜臀va亚洲va欧美va天堂| 欧美国产视频在线| 欧美高清视频不卡网| 成人教育av在线| 蜜臀精品一区二区三区在线观看| 91久久免费观看| 日本美女一区二区三区| 中文字幕一区二区三区四区不卡| 国产主播一区二区| 亚洲成人在线网站| 中文字幕一区免费在线观看| 精品动漫一区二区三区在线观看| 日本在线播放一区二区三区| 日本一区二区在线不卡| 欧美日韩黄色影视| 91视频在线观看| 国产成人精品一区二区三区网站观看 | 不卡视频免费播放| 国内精品久久久久影院色| 亚洲午夜视频在线| 综合激情成人伊人| 中文字幕不卡在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 91超碰这里只有精品国产| 国产jizzjizz一区二区| 日本不卡视频在线| 亚洲va在线va天堂| 亚洲一区二区在线免费看| 亚洲欧美在线另类| 国产精品麻豆欧美日韩ww| 久久精品夜色噜噜亚洲a∨| 欧美zozozo| 日韩欧美国产三级电影视频| 欧美日韩一卡二卡| 欧美主播一区二区三区| 91丝袜美腿高跟国产极品老师| 亚洲国产精品一区二区久久恐怖片| 欧美三级视频在线| 色狠狠av一区二区三区| 91蜜桃免费观看视频| 色综合天天综合网国产成人综合天 | 久久国产剧场电影| 麻豆国产精品视频| 久久99精品久久只有精品| 美女在线视频一区| 日本91福利区| 久久精品国产999大香线蕉| 极品少妇xxxx偷拍精品少妇| 国产综合久久久久久鬼色| 国产裸体歌舞团一区二区| 国产成人av一区二区三区在线观看| 亚洲另类在线制服丝袜| 一区二区三区.www| 亚洲午夜久久久久| 亚欧色一区w666天堂| 日本不卡不码高清免费观看| 美女视频网站黄色亚洲| 国产乱码精品1区2区3区| 成人午夜在线播放| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本精品裸体写真集在线观看| 日韩高清在线一区| 国产自产2019最新不卡| 国产经典欧美精品| 91麻豆免费看| 666欧美在线视频| 久久精品人人做人人综合| 国产精品嫩草影院av蜜臀| 夜夜精品浪潮av一区二区三区| 精品国产91乱码一区二区三区| 91久久香蕉国产日韩欧美9色| 精彩视频一区二区| 成人免费视频视频| 91麻豆精东视频| 日韩色在线观看| 中文字幕第一区| 视频一区在线视频| 成人做爰69片免费看网站| 欧美三级日韩在线| 久久婷婷久久一区二区三区| 日韩美女久久久| 麻豆国产一区二区| 91美女片黄在线观看| 亚洲视频一二区| 美女精品一区二区| 色综合天天综合色综合av| 91精品国产手机| 中文字幕综合网| 国内精品久久久久影院色| 日本韩国视频一区二区| 久久综合九色综合97_久久久| 91精品国产全国免费观看| 国产精品网曝门| 天堂蜜桃91精品| 成人精品视频网站| 日韩免费看的电影| 亚洲一区在线观看免费 | 欧美欧美午夜aⅴ在线观看| 久久亚洲二区三区| 亚洲一区精品在线| 成人免费精品视频| 精品国产一区二区国模嫣然| 亚洲不卡av一区二区三区| av高清久久久| 国产日韩欧美电影| 精品制服美女丁香| 欧美一区三区四区| 亚洲成人自拍一区| 91行情网站电视在线观看高清版| 欧美亚一区二区| 国产精品久久久久影院色老大| 国产精品乱码一区二区三区软件| 国产日产亚洲精品系列| 久久综合综合久久综合| 欧美精品视频www在线观看| 国产精品嫩草影院com| 国产一区不卡精品| 精品99一区二区| 卡一卡二国产精品 | 精品久久五月天| 视频在线在亚洲| 在线影视一区二区三区| 日韩毛片在线免费观看| 成人美女视频在线观看18| 久久亚洲综合av| 国产麻豆视频一区| 国产亚洲一本大道中文在线| 精品一区二区三区在线播放| 日韩欧美一级精品久久| 蜜桃在线一区二区三区| 欧美一级理论片| 美女在线一区二区| 亚洲第一二三四区| 欧美日高清视频| 青青草精品视频| 日韩精品专区在线影院观看| 精品一区二区免费看| 欧美精品一区二区在线观看| 国产乱人伦偷精品视频免下载| 97超碰欧美中文字幕| 欧美国产日韩亚洲一区| 成人av网站在线观看免费| 国产精品精品国产色婷婷| 91丨porny丨国产| 亚洲国产另类精品专区| 777a∨成人精品桃花网| 久久超碰97中文字幕| 国产午夜亚洲精品不卡| eeuss国产一区二区三区| 亚洲欧美日本在线| 欧美日韩高清一区| 久久成人精品无人区| 中文字幕第一区| 日本乱人伦一区| 麻豆一区二区三区| 日本一区二区高清| 日本道免费精品一区二区三区| 久久综合九色综合97婷婷| 粉嫩高潮美女一区二区三区 | 轻轻草成人在线| 欧美一二三区在线| 国产精品66部| 亚洲在线一区二区三区| 精品久久久久久最新网址| av不卡免费电影| 日本麻豆一区二区三区视频| 国产欧美精品一区|