新聞中心
C語言winapi編程,窗口過程函數(shù)聲明,前兩個(gè)標(biāo)示符是什么意思
LRESULT 是這個(gè)函數(shù)的返回值類型
創(chuàng)新互聯(lián)專注于揭陽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開發(fā)。揭陽網(wǎng)站建設(shè)公司,為揭陽等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
typedef?LONG_PTR?LRESULT;
typedef?_W64?long?LONG_PTR;
LRESULT一般也就可以認(rèn)為是long
CALLBACK 表示該函數(shù)是一個(gè)回掉函數(shù)
回掉函數(shù):
怎么用C語言編寫一個(gè)windows窗口?
調(diào)用window庫窗口函數(shù)即可創(chuàng)建windows窗口。
必須使用windows的編譯器,如VC,MS等等。
RegisterClassEx函數(shù):
該函數(shù)注冊(cè)在隨后調(diào)用CreateWindow函數(shù)和CreateWindowEx函數(shù)中使用的窗口類。 RegisterClass函數(shù)己經(jīng)由函數(shù)RegisterClassEx函數(shù)來代替,但是,如果不需要設(shè)置類的小目標(biāo)則仍然可以使用RegisterClass函數(shù)。
CreateWindowEx函數(shù):
該函數(shù)創(chuàng)建一個(gè)具有擴(kuò)展風(fēng)格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數(shù)相同。關(guān)于創(chuàng)建窗口和其他參數(shù)的內(nèi)容,請(qǐng)參看CreateWindow。具體仍可見微軟的msdn。
消息處理函數(shù)WindowProc:
該函數(shù)是一個(gè)應(yīng)用程序定義的函數(shù)。它處理發(fā)送給窗口的消息。WINDPROC類型定義了一個(gè)指向該回調(diào)函數(shù)的指針。WindowProc是用于應(yīng)用程序定義函數(shù)的占位符。
函數(shù)原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
參數(shù):
hwnd:指向窗口的句柄。
uMsg:指定消息類型。
wParam:指定其余的、消息特定的信息。該參數(shù)的內(nèi)容與UMsg參數(shù)值有關(guān)。
IParam:指定其余的、消息特定的信息。該參數(shù)的內(nèi)容與uMsg參數(shù)值有關(guān)。
返回值:返回值就是消息處理結(jié)果,它與發(fā)送的消息有關(guān)。
一個(gè)簡(jiǎn)單的Window的代碼如下:
#include?Windows.h
#include?tchar.h
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam);
int?WinMain(?
__in?HINSTANCE?hInstance,?
__in_opt?HINSTANCE?hPrevInstance,?
__in?LPSTR?lpCmdLine,?
__in?int?nShowCmd?
)
{
TCHAR?*szName?=?_T("myWindow");
WNDCLASSEX?wc?=?{0};
HWND?hWnd?????=?NULL;
MSG?Msg???????=?{0};
wc.cbClsExtra????=?0;
wc.cbWndExtra????=?0;
wc.cbSize????????=?sizeof(WNDCLASSEX);
wc.hbrBackground?=?(HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數(shù)來設(shè)置一個(gè)白色的背景,這里大家設(shè)置為NULL看看,會(huì)很有趣的
wc.hCursor???????=?NULL;//不設(shè)置
wc.hIcon?????????=?NULL;//不設(shè)置
wc.hIconSm???????=?NULL;//不設(shè)置
wc.hInstance?????=?hInstance;//當(dāng)前程序的句柄,hInstance是有系統(tǒng)給傳遞的
wc.lpfnWndProc???=?WinProc;//窗口處理過程的回調(diào)函數(shù)。
wc.lpszClassName?=?szName;//窗口類的名字。
wc.lpszMenuName??=?NULL;?
wc.style?????????=?CS_HREDRAW?|?CS_VREDRAW;?
RegisterClassEx(wc);//在系統(tǒng)中注冊(cè)
hWnd?=?CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//創(chuàng)建窗口,窗口標(biāo)題為"我的窗口我喜歡"
if(hWnd?==?NULL)
{
MessageBox(NULL,_T("There's?an?Error"),_T("Error?Title"),MB_ICONEXCLAMATION|MB_OK);
return?0;
}
ShowWindow(hWnd,nShowCmd);//顯示窗口
UpdateWindow(hWnd);
//下面是對(duì)消息的循環(huán)處理,大家先不必管這些,下節(jié)課我會(huì)細(xì)說的
while(GetMessage(Msg,NULL,0,0))
{
TranslateMessage(Msg);//翻譯消息
DispatchMessage(Msg);//分派消息
}
return?Msg.message;
}
//消息處理函數(shù)
LRESULT?WINAPI?WinProc(HWND?hWnd,UINT?Msg,WPARAM?wParam,LPARAM?lParam)
{
switch(Msg)//處理消息過程
{
case?WM_DESTROY://響應(yīng)鼠標(biāo)單擊關(guān)閉按鈕事件
PostQuitMessage(0);//退出消息隊(duì)列
return?0;//退出函數(shù)
}
return?DefWindowProc(hWnd,Msg,wParam,lParam);
}
如何用C語言編程出可視化界面?
//調(diào)用api函數(shù)創(chuàng)建窗口
//示例:
#include windows.h
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口過程函數(shù)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("MyWindows");//定義窗口類名
HWND hwnd;//窗口句柄
MSG msg; //
WNDCLASS wndclass; ?//窗口類
wndclass.style = CS_HREDRAW | CS_VREDRAW;//指定窗口類型,各種“類風(fēng)格”(詳見下方↓)可以使用按位或操作符組合起來
wndclass.lpfnWndProc = WndProc;//指定窗口過程(必須是回調(diào)函數(shù))
wndclass.cbClsExtra = 0;//預(yù)留的額外空間,一般為 0
wndclass.cbWndExtra = 0;//預(yù)留的額外空間,一般為 0
wndclass.hInstance = hInstance;//應(yīng)用程序的實(shí)例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//為所有基于該窗口類的窗口設(shè)定一個(gè)圖標(biāo)
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//為所有基于該窗口類的窗口設(shè)定一個(gè)鼠標(biāo)指針
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//指定窗口背景色
wndclass.lpszMenuName = NULL;//指定窗口菜單
wndclass.lpszClassName = szAppName;//指定窗口類名
if (!RegisterClass(wndclass))//注冊(cè)窗口
{
MessageBox(NULL, TEXT("這個(gè)程序需要在 Windows NT 才能執(zhí)行!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, ? ? ?//創(chuàng)建窗口
TEXT("windows"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, iCmdShow); ?//顯示窗口
UpdateWindow(hwnd); ? ? ?//更新窗口,重繪
while (GetMessage(msg, NULL, 0, 0)) //獲得消息
{
TranslateMessage(msg);
DispatchMessage(msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//回調(diào)函數(shù)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, ps);
GetClientRect(hwnd, rect);
DrawText(hdc, TEXT("第一個(gè)C語言窗口程序!"), -1, rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
網(wǎng)頁題目:c語言窗口的過程函數(shù) c語言的窗口式圖形界面設(shè)計(jì)
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dogsiis.html