国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Visual C++ 入門精解-第三部分

2019-11-17 05:27:03
字體:
供稿:網(wǎng)友
Windows應用程序的基本運行機制與HelloWin程序詳解總的來說最基本的Windows應用程序的運行執(zhí)行順序總是以如下的基本順序執(zhí)行的。順序結(jié)構(gòu):調(diào)用WinMain函數(shù)開始執(zhí)行--à定義窗口類--à初始化窗口類--à窗口的實例化--à通過消息循環(huán)獲取消息并將消息發(fā)送給消息處理函數(shù)做出相應的操作由于windows應用程序運行的邏輯結(jié)構(gòu)非凡所以代碼的具體解釋筆者就不把程序于敘述分開了了,這樣有利于閱讀與分析。分析代碼如下://程序作者:管寧
//站點:www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務必注明出處和作者 #include <windows.h>#PRagma comment(lib,"winmm.lib")//為了要播放聲音,必須導入這個庫LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)/* HINSTANCE 類型的含義為實例句柄。 hInstance 事實上就是當前應用程序自身的標識代號,代號通常都是一個32位整數(shù)。 hPrevInstance 與過去的16位應用程序有關系,表示指向前一個實例的句柄。 PSTR 類型的含義是指向以/0結(jié)尾的字符串指針。 szCmdLine 前面的sz同樣是表示指向以/0結(jié)尾的字符串指針,這個對象用于保存命令行。 最后iCmdShow是一個整型數(shù)據(jù),標記了程序最初的顯示狀態(tài)。 為SW_SHOWNORAML的時候為一般大小顯示方式。 為SW_SHOWMAXIMIZED的時候為最大化顯示方式。 為SW_SHOWMINNOACTIVE的時候程序?qū)@示在任務欄上。*/{ static char szAppName[] = TEXT("HelloWin");//預先定義一個c風格字符串,稍后用于設置窗口類名稱。 WNDCLASS wndclass;//定義窗口類對象/* 在這里不得不說一下的是,窗口類事實上是strUCt結(jié)構(gòu)體,內(nèi)部有10個分量,他們是用來于初始化窗口類對象而用的。 這個結(jié)構(gòu)體在winuser.h頭文件中定義,從方式上來說,分為ASCII版的WNDCLASSA和Unicode版的WNDCLASSW兩個。
typedef struct tagWNDCLASSA { UINT  style; WNDPROC lpfnWndProc; int   cbClsExtra; int   cbWndExtra; HINSTANCE  hInstance; HICON  hIcon; HCURSOR hCursor; HBRUSH  hbrBackground; LPCSTR  lpszMenuName; LPCSTR  lpszClassName; } WNDCLASSA, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA; typedef struct tagWNDCLASSW { UINT   style; WNDPROC  lpfnWndProc; int   cbClsExtra; int   cbWndExtra; HINSTANCE hInstance; HICON  hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; } WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
*/ //------------------------------- 窗口類對象初始化過程 ------------------------------------ wndclass.style = CS_HREDRAW CS_VREDRAW; /* 設置窗口類對象的樣式風格,CS_HREDRAW CS_VREDRAW這兩個值是通過位運算的與運算結(jié)合起來的。 表示了窗口在改變了水平和垂直大小的時候,窗口要強迫刷新。 這些通過define定義的標識,可以在WinUser.h頭文件中找到。 #define CS_VREDRAW 0x0001 #define CS_HREDRAW 0x0002 #define CS_DBLCLKS 0x0008 #define CS_OWNDC 0x0020 #define CS_CLASSDC 0x0040 #define CS_PARENTDC   0x0080 #define CS_NOCLOSE   0x0200 #define CS_SAVEBITS 0x0800 #define CS_BYTEALIGNCLIENT 0x1000 #define CS_BYTEALIGNWINDOW 0x2000 #define CS_GLOBALCLASS  0x4000 #define CS_IME    0x00010000 */ wndclass.lpfnWndProc = WndProc ;//指定窗口的處理函數(shù)為WndProc,WndProc將處理windows消息。 wndclass.cbClsExtra = 0;//窗口類無擴展
wndclass.cbWndExtra = 0;//窗口實例無擴展 wndclass.hInstance = hInstance;//指定當前應用程序?qū)嵗浔?也就是程序當前的標識號。 wndclass.hIcon = LoadIcon (NULL,IDI_application); /* 通過LoadIcon函數(shù)設置應用程序窗口標題的icon圖標。 HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName); 函數(shù)返回HICON類型的圖標句柄。 第一個參數(shù)表示當前應用程序的窗口句柄,第二個參數(shù)表示圖標。 默認狀態(tài)下,第一個參數(shù)為NULL,第二個為IDI_APPLICATION,表示使用系統(tǒng)默認提供的圖標,可以在WinUser.h頭文件中找到。 #define IDI_APPLICATION 32512 */ wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /* 通過LoadCursor函數(shù)設置應用程序窗口光標樣式。 HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName); 函數(shù)返回HCURSOR類型的光標句柄。 第一個參數(shù)表示當前應用程序的窗口句柄,第二個參數(shù)表示光標。 默認狀態(tài)下,第一個參數(shù)為NULL,第二個為IDC_ARROW,表示使用系統(tǒng)默認提供的光標,可以在WinUser.h頭文件中找到。 #define IDC_ARROW MAKEINTRESOURCE(32512) */ wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH); /* 通過GetStockObject函數(shù)設置應用程序窗口的背景顏色。 HGDIOBJ GetStockObject(int fnObject); 函數(shù)返回HCURSOR類型的GDI對象句柄,為了程序能夠正確執(zhí)行,必須把HGDIOBJ類型強制轉(zhuǎn)換成HBRUSH畫刷句柄。
參數(shù)表示當前使用的畫刷顏色。 這些常量的定義可以在WinGDI.h頭文件中找到。 #define WHITE_BRUSH 0 #define LTGRAY_BRUSH 1 #define GRAY_BRUSH 2 #define DKGRAY_BRUSH 3 #define BLACK_BRUSH 4 #define NULL_BRUSH 5 #define HOLLOW_BRUSH NULL_BRUSH */ wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName;//窗口類對象的名稱//----------------------------------------------------------------------------------------- RegisterClass (&wndclass); /* 注冊窗口類,參數(shù)為窗口類對象的指針。 函數(shù)原形為: ATOM RegisterClass(CONST WNDCLASS *lpWndClass); */ //-------------------------- 實例化過程 ------------------------------------------------- HWND hwnd ; //創(chuàng)建用于保存窗口句柄的對象,窗口句柄是系統(tǒng)識別不同窗口的依據(jù),它只是個代號。 hwnd = CreateWindow( szAppName, // 窗口類名稱 "你好世界", // 窗口標題
WS_OVERLAPPEDWINDOW, // 窗口樣式 CW_USEDEFAULT, // 初始的窗口x軸位置 CW_USEDEFAULT, // 初始的窗口y軸位置 CW_USEDEFAULT, // 初始的窗口x軸大小 CW_USEDEFAULT, // 初始的窗口y軸大小 NULL, // 父窗口句柄 NULL, // 窗口功能表句柄 hInstance, // 應用程序?qū)嵗浔? NULL // 建立參數(shù),這個參數(shù)可以存取后面程序中可能引用到的資料。 ); /* 在窗口類對象的初始化過程中,我們定義了窗口的一些簡單一般特征,比如背景顏色呀,光標呀,等等。。。 但是在利用CreateWindow創(chuàng)建窗口的時候可以設置更多的細節(jié),比如窗口標題這些。 函數(shù)原形如下: HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName,
DWord dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 太仆寺旗| 会东县| 兰西县| 合作市| 阿合奇县| 佛冈县| 广东省| 南汇区| 洛浦县| 嘉定区| 会昌县| 汝阳县| 红安县| 沅陵县| 宁城县| 花莲市| 南郑县| 马鞍山市| 文成县| 阿克苏市| 台中县| 洪江市| 丹巴县| 巴彦淖尔市| 鹿邑县| 资中县| 惠来县| 维西| 酒泉市| 巍山| 清远市| 奉贤区| 宜君县| 蓬莱市| 台北县| 垦利县| 建湖县| 红河县| 永寿县| 保定市| 准格尔旗|