第乙個windows API視窗程式

2021-10-09 17:19:57 字數 3170 閱讀 6300

winmian函式格式固定,可以直接貼上複製

int winapi winmain(hinstance hinstance, //應用程式例項

hinstance hprevinstance, //上乙個應用程式例項,不用

lpstr lpcmdline, //命令列引數

int ncmdshow //視窗顯示的樣式, 最大化,最小化

{}

即給視窗成員變數賦值,具體成員怎麼賦值參考

msdn

wndclass wc;

wc.cbcl***tra = 0; //類的附加資訊,一般設定為0

wc.cbwndextra = 0; //視窗附加資訊,一般設定為0

wc.hbrbackground = createsolidbrush(rgb(255, 100, 100)); //背景色設定

wc.hcursor = loadcursor(null, idc_hand); //載入系統預設游標

wc.hinstance = hinstance; //傳遞給myregisterclass的hinstance引數值。主視窗需要知道正在使用的是哪個例項。

wc.lpfnwndproc = winproc; //視窗過程函式名字,訊息處理函式

wc.lpszclassname = text("windows"); //類的名字

wc.lpszmenuname = text("menu"); //選單名字

wc.style = cs_hredraw | cs_vredraw;; //顯示風格

即告訴視窗過程函式的入口位址,函式固定為registerclass(視窗位址)

registerclass(&wc);
設計並註冊視窗類後用 createwindow函式建立視窗,函式成員變數如下

hwnd hwnd = createwindow(text("windows"), text("視窗標題"),

300, 300, 300, 300,//(x,y,width,height)位置及大小

null, null, hinstance, null);//父視窗的控制代碼、主選單的控制代碼、應用程式例項控制代碼

showwindow(視窗控制代碼,視窗顯示狀態)

showwindow(hwnd, sw_shownormal);

updatewindow(hwnd);

getmessage(訊息結構體,指定接受視窗訊息的視窗控制代碼(通常為null,用於接收屬於呼叫執行緒的所有視窗的視窗訊息),獲取訊息最小值,獲取訊息最大值)

後兩個均設定為0時接受所有訊息

msg msg;

//如果接受到wm_quit, 返回0, 退出; 如果出錯,返回-1,不退出

while (getmessage(&msg, null, 0, 0))//預設接受所有資訊

即我們對視窗做出的舉動視窗應該怎麼反應,比如按下滑鼠左鍵,會彈出乙個訊息框,用messagebox(視窗控制代碼,訊息框內容,訊息框標題,訊息框樣式)

lresult callback winproc(hwnd hwnd, //視窗控制代碼,訊息所屬視窗

uint umsg, //訊息標誌

wparam wparam, //附加資訊

lparam lparam

) break; }

case wm_destroy:

postquitmessage(0); //wm_quit, 給主函式返回 msg.wparam

break;

default:

/* 該函式對未被處理的訊息提供預設響應 */

return defwindowproc(hwnd, umsg, wparam, lparam);

} return 0;

}

只是主程式,vs建立乙個win32程式有很多檔案,主**如下

#include #include "stdafx.h"

//視窗過程函式

lresult callback winproc(hwnd hwnd, //視窗控制代碼,訊息所屬視窗

uint umsg, //訊息標誌

wparam wparam, //附加資訊

lparam lparam

) break; }

case wm_destroy:

postquitmessage(0); //wm_quit, 給主函式返回 msg.wparam

break;

default:

/* 該函式對未被處理的訊息提供預設響應 */

return defwindowproc(hwnd, umsg, wparam, lparam);

} return 0;

}//winapi: 修飾函式,規定函式引數入棧從右往左,函式呼叫完畢,自動清理堆疊

//1)定義winmain函式

int winapi winmain(hinstance hinstance, //應用程式例項

hinstance hprevinstance, //上乙個應用程式例項,不用

lpstr lpcmdline, //命令列引數

int ncmdshow //視窗顯示的樣式, 最大化,最小化

vc++和vs的不同沒有意識到,直接把vc++原始碼貼上到vs上一直報錯,到現在也沒弄懂怎麼回事

一直感覺windows視窗程式那一堆堆固定格式的**很複雜很難,看懂其實也就那樣,就是要弄懂每塊**的意思,就好理解了,只是英語有些複雜,對我這種英語渣渣很不友好

很多函式的引數都是固定的,需要自己去查幫助文件,有點麻煩

markdown編輯好像是比word方便

第乙個視窗程式

程式截圖 程式 include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icm...

第乙個視窗程式

includeint winapi winmain hinstance hinstance,應用程式當前例項的控制代碼。hinstance hprevinstance,win16留下的廢物現在已經不用了 lpstr lpcmdline,命令列引數 int ncmdshow 主視窗初始化時的顯示方式 ...

第乙個windows視窗程式

includeint winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow 類似命令列的 include,不過更像c 的 include,包含了其他許多的標頭檔案。視窗版也包含了乙...