国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

windows編程(1)-第一個(gè)窗口程序

這篇具有很好參考價(jià)值的文章主要介紹了windows編程(1)-第一個(gè)窗口程序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文章首發(fā)于:My Blog 歡迎大佬們前來逛逛

1. main函數(shù)入口點(diǎn)

win32的main函數(shù)入口點(diǎn)為 WinMain或者wWinMain,他們包含四個(gè)參數(shù):

int __clrcall WinMain(
  [in] HINSTANCE hInstance,
  [in] HINSTANCE hPrevInstance,
  [in] LPSTR     lpCmdLine,
  [in] int       nShowCmd
);

其中:

  • hInstance:應(yīng)用程序當(dāng)前窗口的實(shí)例句柄
  • hPrevInstance:應(yīng)用程序上一個(gè)窗口的實(shí)例句柄
  • lpCmdLine:應(yīng)用程序的命令行
  • nShowcmd:控制窗口的顯示方式

其中wWinMain與WinMain的區(qū)別是 wWinMain適用于多字節(jié)字符集,而WinMian適用于unicode字符集。

其中第三個(gè)參數(shù)WinMain是LPSTR類型:

typedef char CHAR;

但是wWinMain是LPWSTR類型:

typedef wchar_t WCHAR; 

2. 窗口函數(shù)六部曲

2.1 注冊(cè)窗口類

ATOM RegisterClassExA(
  [in] const WNDCLASSEXA *unnamedParam1
);

其中:

  • unnamedParam1:一個(gè)WNDCLASSEXA結(jié)構(gòu)體指針變量,這個(gè)結(jié)構(gòu)包含了我們所創(chuàng)建對(duì)象的窗口的屬性信息
struct tagWNDCLASSEXW {
    UINT        cbSize; 		
    /* Win 3.x */
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
    /* Win 4.0 */
    HICON       hIconSm;
}

其中:比較重要的幾個(gè)參數(shù):

  • hInstance:窗口的示例句柄,就是我們的WinMain包含的hInstance參數(shù)
  • lpszClassName:窗口類名
  • cbSize:結(jié)構(gòu)體的大小,必須指定其為sizeof(WNDCLASSEX)
  • style:窗口類的樣式,設(shè)置水平與垂直重繪:CS_HREDRAW | CS_VREDRAW
  • hbrBackground:窗口回調(diào)函數(shù),其接受一個(gè)WNDPROC的參數(shù),WNDPROC是一個(gè)typedef定義的函數(shù)指針,其中包含四個(gè)參數(shù):HWND UINT WPARAMS LPARAMS。
//回調(diào)函數(shù)m_WNDPROC:lpfnWndProc的數(shù)據(jù)類型
LRESULT CALLBACK m_WNDPROC(HWND hwnd, UINT msg, WPARAM wParams, LPARAM lParams) {
	return DefWindowProc(hwnd, msg, wParams, lParams);
}//使用return DefWindowProc作為返回值

WNDCLASSEX mWinC = {NULL};
mWinC.cbSize = sizeof(WNDCLASSEX);
mWinC.hInstance = hInstance;
mWinC.lpszClassName = "我的第一個(gè)窗口";
mWinC.hbrBackground = (HBRUSH)NULL; //畫刷
mWinC.lpfnWndProc = m_WNDPROC;
mWinC.style = CS_HREDRAW | CS_VREDRAW;
//注冊(cè)窗口類
RegisterClassEx(&mWinC);

2.2 創(chuàng)建窗口

HWND CreateWindowExA(
		DWORD dwExStyle,
		LPCSTR lpClassName,
		LPCSTR lpWindowName,
		DWORD dwStyle,
		int X,
		int Y,
		int nWidth,
		int nHeight,
		HWND hWndParent,
		HMENU hMenu,
		HINSTANCE hInstance,
		LPVOID lpParam);

其中:重要的參數(shù)有:

  • dwExStyle:設(shè)置為mWinC的style即可。
  • lpClassName,lpWindowName:類名與窗口名
  • dwStyle:窗口的樣式,設(shè)置為WS_OVERLAPPEDWINDOW即可。
  • x y Width Height:窗口的大小和寬高
  • hInstance:窗口的實(shí)例句柄。
HWND hwnd =  CreateWindowEx(mWinC.style,
		mWinC.lpszClassName,
		"First Window",
		WS_OVERLAPPEDWINDOW,
		100, 100, 600, 600,
		NULL, NULL,
		mWinC.hInstance,
		NULL);
if (!hwnd) return false;

其返回值為HWND,表示創(chuàng)建了一個(gè)窗口句柄hwnd,如果其為NULL,則創(chuàng)建失敗。

2.3 顯示窗口

BOOL ShowWindow(
  [in] HWND hWnd,
  [in] int  nCmdShow
);
  • hwnd:創(chuàng)建的窗口實(shí)例句柄
  • nCmdshow:控制窗口的顯示方式
ShowWindow(hwnd, SW_SHOW);

2.4 刷新窗口

UpdateWindow(hwnd);

2.5 消息循環(huán)

  1. 接受消息
//從調(diào)用線程的消息隊(duì)列中檢索消息。 
BOOL GetMessage(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax
);

參數(shù):

  • lpMsg:指向MSG的指針,我們需要?jiǎng)?chuàng)建一個(gè)MSG類型的變量表示消息變量。

  1. 處理消息
//將虛擬密鑰消息轉(zhuǎn)換為字符消息。
BOOL TranslateMessage(
  [in] const MSG *lpMsg
);
  • lpMsg:消息指針

  1. 發(fā)送消息
//將消息調(diào)度到窗口過程。 
LRESULT DispatchMessage(
  [in] const MSG *lpMsg
);
  • 消息指針

// 消息循環(huán)
MSG msg{ NULL };
while (true) {
    //接收消息
    GetMessage(&msg, NULL, NULL, NULL);
    //處理消息
    TranslateMessage(&msg);
    //發(fā)送消息
    DispatchMessage(&msg);
}

2.6 消息處理函數(shù)

消息處理函數(shù)即:WNDPROC

我們已經(jīng)在 2.1 注冊(cè)窗口類時(shí)處理過了。

//消息處理函數(shù)
LRESULT CALLBACK m_WNDPROC(HWND hwnd, UINT msg, WPARAM wParams, LPARAM lParams) {
	return DefWindowProc(hwnd, msg, wParams, lParams);
}
...
...
wMinC.lpfnWndProc=m_WNDPROC
...
...

3. 完整代碼

由于我們運(yùn)行的時(shí)Win32程序,我們應(yīng)該在:

項(xiàng)目 - 屬性 - 連接器 - 系統(tǒng) - 子系統(tǒng)

控制臺(tái)改為窗口文章來源地址http://www.zghlxwxcb.cn/news/detail-409394.html

#include <Windows.h>

//回調(diào)函數(shù)
LRESULT CALLBACK m_WNDPROC(HWND hwnd, UINT msg, WPARAM wParams, LPARAM lParams) {
	return DefWindowProc(hwnd, msg, wParams, lParams);
}

int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR cCmdLine,
	int nShowCmd
) {
	// 注冊(cè)窗口類
	WNDCLASSEX mWinC = {NULL};
	mWinC.cbSize = sizeof(WNDCLASSEX);
	mWinC.hInstance = hInstance;
	mWinC.lpszClassName = "我的第一個(gè)窗口";
	mWinC.hbrBackground = (HBRUSH)NULL;
	mWinC.lpfnWndProc = m_WNDPROC;
	mWinC.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClassEx(&mWinC);
	// 創(chuàng)建窗口類
	HWND hwnd =  CreateWindowEx(mWinC.style,
		mWinC.lpszClassName,
		"First Window",
		WS_OVERLAPPEDWINDOW,
		100, 100, 600, 600,
		NULL, NULL,
		mWinC.hInstance,
		NULL);
	if (!hwnd) return false;
	// 顯示窗口類
	ShowWindow(hwnd, SW_SHOW);

	// 刷新窗口類
	UpdateWindow(hwnd);

	// 消息循環(huán)
	MSG msg{ NULL };
	while (true) {
		//接收消息
		GetMessage(&msg, NULL, NULL, NULL);
		//處理消息
		TranslateMessage(&msg);
		//發(fā)送消息
		DispatchMessage(&msg);
	}
	return true;
}

到了這里,關(guān)于windows編程(1)-第一個(gè)窗口程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 智能合約協(xié)議和提案(文章不斷跟新,歡迎評(píng)論補(bǔ)充&糾正!)

    描述 : ERC-20是基于以太坊區(qū)塊鏈技術(shù)的一種代幣標(biāo)準(zhǔn)協(xié)議。它規(guī)定了一系列的規(guī)范和接口,使得不同的代幣可以在以太坊網(wǎng)絡(luò)上遵循同樣的規(guī)則,從而實(shí)現(xiàn)互操作性和互換性。這種標(biāo)準(zhǔn)協(xié)議對(duì)于以太坊生態(tài)系統(tǒng)的發(fā)展起到了重要的推動(dòng)作用,為眾多區(qū)塊鏈項(xiàng)目提供了代幣發(fā)

    2024年04月29日
    瀏覽(30)
  • C/C++ 從零實(shí)現(xiàn)一個(gè)windows窗口(非常詳細(xì))

    C/C++ 從零實(shí)現(xiàn)一個(gè)windows窗口(非常詳細(xì))

    C/C++教程目錄(專欄文章列表,歡迎訂閱,持續(xù)更新...) https://blog.csdn.net/weixin_50964512/article/details/125710864 學(xué)習(xí)完C/C++之后,最郁悶的可能就是感覺啥也干不了,怎么才能寫出平常我們所使用的軟件模樣? 而對(duì)于大部分人來說,最常使用的就是windows系統(tǒng),所以這就需要了解w

    2024年02月11日
    瀏覽(20)
  • Python - 操作windows程序窗口

    Python - 操作windows程序窗口

    ● 在自動(dòng)化測(cè)試腳本中,有時(shí)候需要自動(dòng)安裝windows程序,或者操作windows程序。對(duì)于操作windows程序的python庫五花八門,本文以pyautoit庫演示如何操作windows程序窗口。 ●?pyautoit庫是AutoIt v3工具的python接口,直接綁定到AutoItX3.dll。AutoIt v3工具可以實(shí)現(xiàn)通過模擬鼠標(biāo)、鍵盤對(duì)win

    2024年02月05日
    瀏覽(27)
  • qt怎么一個(gè)程序顯示兩個(gè)窗口

    qt怎么一個(gè)程序顯示兩個(gè)窗口

    首先我們要把.ui文件的QMainWindow改成QDialog(用記事本) ?然后把.ui對(duì)應(yīng)的頭文件和.cpp 出現(xiàn)QMainWindow改成QDialog 如圖重點(diǎn)其包含頭文件定義也記得修改 ? ?然后非模態(tài)顯示,才不堵塞主窗口

    2024年02月12日
    瀏覽(31)
  • 我們的第一個(gè) Qt 窗口程序

    我們的第一個(gè) Qt 窗口程序

    Qt 入門實(shí)戰(zhàn)教程(目錄) Windows Qt 5.12.10下載與安裝 本文介紹用Qt自帶的集成開發(fā)工具Qt Creator創(chuàng)建Qt默認(rèn)的窗口程序。 本文不需要你另外安裝Visual Studio 2022這樣的集成開發(fā)環(huán)境,也不需要你再在Visual Studio 2022中安裝Qt VS Tools這樣的插件。 目的就是為了能夠讓你可以更快的把Q

    2024年02月11日
    瀏覽(25)
  • windows下 java程序無窗口啟動(dòng)、無窗口啟動(dòng)java -jar

    方式一: javaw -jar yourJarFile.jar 如果在使用 javaw -jar yourJarFile.jar 啟動(dòng)時(shí)仍然出現(xiàn)了命令行窗口,這可能是由于你的 JAR 文件中存在控制臺(tái)輸出。即使使用 javaw 啟動(dòng)器,如果 JAR 文件中有輸出到標(biāo)準(zhǔn)輸出流(System.out)的操作,它也會(huì)彈出命令行窗口來顯示這些輸出 方式二: 創(chuàng)建

    2024年02月13日
    瀏覽(16)
  • 【Python】實(shí)現(xiàn)一個(gè)類似于Glass2k的Windows窗口透明化軟件

    【Python】實(shí)現(xiàn)一個(gè)類似于Glass2k的Windows窗口透明化軟件

    ? ? ? ? 網(wǎng)上看到一款Windows下的窗口透明化工具Glass2k(Glass2k官網(wǎng)),可以簡(jiǎn)單地通過快捷鍵實(shí)現(xiàn)任意窗口的透明化,還挺方便的,想用Python自己實(shí)現(xiàn)一下類似的功能。 ???????? 軟件已經(jīng)開源到 :窗口透明化小工具開源地址 ? ? ? ? 效果圖如下: ????????工具包含以

    2024年02月22日
    瀏覽(15)
  • UNIAPP(小程序)每十個(gè)文章中間一個(gè)廣告

    UNIAPP(小程序)每十個(gè)文章中間一個(gè)廣告

    ?三十秒刷新一次廣告 ad-intervals=\\\"30\\\"

    2024年04月09日
    瀏覽(20)
  • [QT]設(shè)置程序僅打開一個(gè),再打開就喚醒已打開程序的窗口

    [QT]設(shè)置程序僅打開一個(gè),再打開就喚醒已打開程序的窗口

    需求:speedcrunch 這個(gè)軟件是開源的計(jì)算器軟件。配合launch類軟件使用時(shí),忘記關(guān)閉就經(jīng)常很多窗口,強(qiáng)迫癥,從網(wǎng)上搜索對(duì)版本進(jìn)行了修改。 差異圖下圖: findwindow的方法需要添加user32的庫,因?yàn)閟peedcrunch已經(jīng)添加,則在編譯文件中未改動(dòng)。? 效果: ?

    2024年02月10日
    瀏覽(41)
  • 真正理解微軟Windows程序運(yùn)行機(jī)制——窗口機(jī)制(第三部分)

    真正理解微軟Windows程序運(yùn)行機(jī)制——窗口機(jī)制(第三部分)

    我是荔園微風(fēng),作為一名在IT界整整25年的老兵,今天說說Windows程序的運(yùn)行機(jī)制。經(jīng)常被問到MFC到底是一個(gè)什么技術(shù),為了解釋這個(gè)我之前還寫過帖子,但是很多人還是不理解。其實(shí)這沒什么,我在學(xué)生時(shí)代也被這個(gè)問題困繞過。而且那個(gè)時(shí)間學(xué)習(xí)資料沒有那么豐富,網(wǎng)上也

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包