[windows] _ windows編程基礎(chǔ)_01

windows API,為應(yīng)用程序提供windows系統(tǒng)特殊函數(shù)以及數(shù)據(jù)結(jié)構(gòu).
windows應(yīng)用程序可以利用大量api函數(shù)調(diào)用系統(tǒng)功能.
是win系統(tǒng)與應(yīng)用程序間的標(biāo)準(zhǔn)程序接口.


幾個(gè)類別

  • 窗口管理函數(shù): 實(shí)現(xiàn)窗口創(chuàng)建,移動(dòng)和修改功能.
  • 系統(tǒng)服務(wù)函數(shù): 實(shí)現(xiàn)與操作系統(tǒng)有關(guān)的多種功能.
  • 圖形設(shè)備函數(shù): 實(shí)現(xiàn)與設(shè)備無(wú)關(guān)的圖形操作功能.

windows程序的幾個(gè)概念:

  • 窗口概念:

是系統(tǒng)管理應(yīng)用程序的基本單位,應(yīng)用程序與用戶交互的接口環(huán)境.是win應(yīng)用程序基本的操作單元.

圖片.png
  • 事件驅(qū)動(dòng)概念:
圖片.png
  • 句柄概念:
    句柄是一個(gè)8字節(jié)長(zhǎng)(相當(dāng)于64位操作系統(tǒng))的數(shù)值,用于表示應(yīng)用程序中不同的對(duì)象和同類對(duì)象的不同的實(shí)例.
圖片.png
  • 消息的概念:
圖片.png

觀察MSG結(jié)構(gòu)體的定義:

圖片.png
圖片.png

  • windows 應(yīng)用程序組成以及編程步驟
圖片.png
圖片.png
圖片.png
  • 定義窗口類
  • 注冊(cè)窗口類
  • 創(chuàng)建一個(gè)窗口類的實(shí)例
  • 顯示窗口
圖片.png
圖片.png
圖片.png
圖片.png
圖片.png
圖片.png
  • 消息循環(huán)
圖片.png
  • 窗口函數(shù) WinProc
圖片.png
圖片.png
// 主函數(shù),入口函數(shù).函數(shù)說(shuō)明,初始化,進(jìn)入消息循環(huán).
// 四個(gè)參數(shù),分別傳入當(dāng)前句柄,父窗口句柄,命令行指針(給應(yīng)用程序下命令的),樣式.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrstance,LPSTR lpszCmdLine,int nCmdShow) {

    HWND hwnd; // 定義一個(gè)窗口句柄
    MSG mMsg; // 定義一消息實(shí)例.

    // 定義一個(gè)窗口類實(shí)例.
    WNDCLASS wndclass; 
    // unicode 編碼.
    wchar_t lpszClassName[] = L"窗口";// 窗口類名.
    wchar_t lpszTitle[] = L"my_windows";// 窗口標(biāo)題名.

    wndclass.cbClsExtra = 0; // 窗口類無(wú)擴(kuò)展
    wndclass.cbWndExtra = 0; // 窗口實(shí)例無(wú)擴(kuò)展
    wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); // 背景顏色,使用系統(tǒng)畫刷填充.
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 系統(tǒng)光標(biāo)
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 圖標(biāo),使用系統(tǒng).
    wndclass.hInstance = hInstance; // 當(dāng)前實(shí)例句柄.
    wndclass.lpfnWndProc = WinProc; // 定義窗口處理函數(shù)
    wndclass.lpszClassName =lpszClassName; // 類名
    wndclass.lpszMenuName = NULL; // 菜單名.
    wndclass.style = 0; //值設(shè)0,默認(rèn)樣式,缺省處理.(詳細(xì)設(shè)置,class style cs_)

    // 注冊(cè)窗口類
    if (!RegisterClass(&wndclass))
    {
        MessageBeep(0);
        return FALSE;
    }

    // 創(chuàng)建窗口.
    hwnd = CreateWindow(
        lpszClassName, // 窗口類名
        lpszTitle, // 窗口名
        WS_OVERLAPPEDWINDOW, // 窗口風(fēng)格window style
        CW_USEDEFAULT, 
        CW_USEDEFAULT,  //窗口左上角坐標(biāo) usedefault 使用默認(rèn)值(缺省,使用系統(tǒng)默認(rèn)大小)
        CW_USEDEFAULT,
        CW_USEDEFAULT, // 窗口高寬使用默認(rèn)值.
        NULL, // 無(wú)父窗口
        NULL, // 無(wú)菜單項(xiàng)(menu) window系統(tǒng)的一種資源.
        hInstance, // 創(chuàng)建此窗口的當(dāng)前實(shí)例句柄
        NULL // lParam 類型.設(shè)為NULL不使用該值.
        );

    // 顯示窗口
    ShowWindow(hwnd,nCmdShow);
    // 跟新,繪制用戶區(qū).
    UpdateWindow(hwnd);
    // 進(jìn)入消息循環(huán)
    while (GetMessage(&mMsg,NULL,0,0))
    {
        TranslateMessage(&mMsg); // 將消息的虛擬鍵轉(zhuǎn)換為字符消息
        DispatchMessage(&mMsg); // 將消息傳送到指定的窗口函數(shù)
    }
    return mMsg.wParam;
}

// 窗口函數(shù),消息處理函數(shù),回調(diào)函數(shù).
LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) {

    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0); // 退出.
        return 0;
    default:
        return
        DefWindowProc(hWnd, uMsg, wParam, lParam); // 缺省的消息處理
    }
}

  • 數(shù)據(jù)類型:
圖片.png
  • 數(shù)據(jù)結(jié)構(gòu)
圖片.png
  • WNDCLASSEX 結(jié)構(gòu)


    圖片.png
  • RECT 結(jié)構(gòu)

圖片.png
圖片.png

  • 總結(jié)一下創(chuàng)建一個(gè)windows程序的過(guò)程:

引入頭文件<windows.h>,聲明入口函數(shù) WinMain函數(shù),其帶入的四個(gè)參數(shù),第一個(gè)是當(dāng)前的實(shí)例句柄,第二個(gè)父窗口句柄,第三個(gè)LPSTR類型的指針,指向命令行指令.第四個(gè)是整型的樣式值.

主函數(shù)需要先通過(guò)WNDCLASS wndclass;來(lái)進(jìn)行窗口類的定義,然后通過(guò)RegisterClass(&wndclass)注冊(cè)窗口類,如果注冊(cè)失敗,返回FALSE.如果注冊(cè)成功,則通過(guò)HWND hWnd = CreateWindow()創(chuàng)建一個(gè)窗口.并初始化.如果創(chuàng)建失敗返回FALSE,否則通過(guò)ShowWindow(hInstance,nCmdShow)顯示,并使用UpdateWindow(hWnd)更新窗口.在主函數(shù)中定義一個(gè)MSG結(jié)構(gòu)體變量 mMsg,通過(guò)while循環(huán)和GetMessage(&mMsg)進(jìn)入消息循環(huán),循環(huán)中不端通過(guò)TranslateMessage(&mMsg)將虛擬鍵消息轉(zhuǎn)換為字符消息,再通過(guò)DispatchMessage(&mMsg)將消息分派到指定的窗口函數(shù).進(jìn)入窗口函數(shù)WndProc(),WndProc函數(shù)有四個(gè)參數(shù),分別傳入消息發(fā)生的窗口句柄,消息類型,消息所攜帶的字參數(shù)wParam和長(zhǎng)字參數(shù)lParam,通過(guò)switch(mMsg)結(jié)構(gòu)分別對(duì)接收到的不同消息做處理.在默認(rèn)情況下要通過(guò)DefWindowProc()函數(shù)做默認(rèn)(缺省)處理.當(dāng)接收到WM_DESTROY消息是通過(guò)PostQuitMessage()函數(shù)退出消息循環(huán).并在主函數(shù)中返回一個(gè)mMsg的字參數(shù)(wParam)作為程序的結(jié)束.


2019.1.3
11.08

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末早抠,一起剝皮案震驚了整個(gè)濱河市沃琅,隨后出現(xiàn)的幾起案子臀蛛,更是在濱河造成了極大的恐慌粪滤,老刑警劉巖缎谷,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派撕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡片挂,警方通過(guò)查閱死者的電腦和手機(jī)幻林,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)音念,“玉大人沪饺,你說(shuō)我怎么就攤上這事≈⒒瑁” “怎么了随闽?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肝谭。 經(jīng)常有香客問(wèn)我掘宪,道長(zhǎng),這世上最難降的妖魔是什么攘烛? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任魏滚,我火速辦了婚禮,結(jié)果婚禮上坟漱,老公的妹妹穿的比我還像新娘鼠次。我一直安慰自己,他們只是感情好芋齿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布腥寇。 她就那樣靜靜地躺著,像睡著了一般觅捆。 火紅的嫁衣襯著肌膚如雪赦役。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天栅炒,我揣著相機(jī)與錄音掂摔,去河邊找鬼。 笑死赢赊,一個(gè)胖子當(dāng)著我的面吹牛乙漓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播释移,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叭披,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了秀鞭?” 一聲冷哼從身側(cè)響起趋观,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扛禽,失蹤者是張志新(化名)和其女友劉穎锋边,沒(méi)想到半個(gè)月后皱坛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豆巨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年剩辟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片往扔。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贩猎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萍膛,到底是詐尸還是另有隱情吭服,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布蝗罗,位于F島的核電站艇棕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏串塑。R本人自食惡果不足惜沼琉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桩匪。 院中可真熱鬧打瘪,春花似錦、人聲如沸傻昙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妆档。三九已至僻爽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間过吻,已是汗流浹背进泼。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纤虽,地道東北人乳绕。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逼纸,于是被迫代替她去往敵國(guó)和親洋措。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354