c語言hwnd
① 怎樣用c語言編寫出窗體程序
#include <windows.h>
//Function prototype.
int WINAPI WinMain(HINSTANCE,HINSTANCE ,LPSTR ,int);
LRESULT CALLBACK MainWndProc(HWND ,UINT ,WPARAM,LPARAM);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE,int);
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(nMsg)
{
case WM_COMMAND:
{
hdc = GetDC((HWND)lParam);
GetClientRect ((HWND)lParam, &rect) ;
DrawText(hdc,"HOHO",-1,&rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC((HWND)lParam,hdc);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&ps);
GetClientRect (hwnd, &rect) ;
DrawText(hdc,"Hello Word",-1,&rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd,&ps);
}
break;
//按鍵
case WM_KEYDOWN:
if(wParam == VK_ESCAPE)
SendMessage(hwnd,WM_CLOSE,0,0);
break;
case WM_CHAR:
switch(wParam)
{
case 'w':
MessageBox(hwnd,"UP","KeyBorad Input",MB_OK);
break;
case 's':
MessageBox(hwnd,"DOWN","KeyBorad Input",MB_OK);
break;
case 'a':
MessageBox(hwnd,"LEFT","KeyBorad Input",MB_OK);
break;
case 'd':
MessageBox(hwnd,"RIGHT","KeyBorad Input",MB_OK);
break;
}
break;
//關閉
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,nMsg,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInStance,
LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
if(!InitApplication(hInstance))
{
MessageBox(NULL,"InitApplication Failed","Error!",MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
if(!InitInstance(hInstance,nCmdShow)){
MessageBox(NULL,"InitInstance Failed","Error!",MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
while(GetMessage(&msg,(HWND) NULL,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style = CS_DBLCLKS;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "MainWClass";
return RegisterClass(&wc);
}
InitInstance(HINSTANCE hInstance,int nCmdShow){
HWND hwnd;
HWND hwndCloseButton;
hwnd = CreateWindow(
"MainWClass",
"Sample",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND)NULL,
(HMENU)NULL,
hInstance,
(LPVOID)NULL);
if(!hwnd)
return FALSE;
hwndCloseButton = CreateWindow(
"BUTTON",
"CLOSE",
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
100,
100,
100,
80,
hwnd,
(HMENU)NULL,
hInstance,
(LPVOID)NULL);
if(!hwndCloseButton)
return FALSE;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
② C++的 HWND hWnd;是什麼意思
HWND 是一個基本類型,和char int等同級別的,可以把它當做long型去看待,和身份證號一樣。
HWND,h 是類型描述,表示句柄(handle), Wnd 是變數對象描述,表示窗口,所以hWnd 表示窗口句柄。hWnd 屬性,返回窗體或控制項的句柄(注意 OLE 容器控制項不支持該屬性。句柄:是由操作環境定義的一個唯一的整數值,它被程序用來標識或者切換到對象,如窗體或控制項等。
(2)c語言hwnd擴展閱讀:
在C++中,類是支持數據封裝的工具,對象則是數據封裝的實現。C++通過建立用戶定義類支持數據封裝和數據隱藏。
在面向對象的程序設計中,將數據和對該數據進行合法操作的函數封裝在一起作為一個類的定義。對象被說明為具有一個給定類的變數。
每個給定類的對象包含這個類所規定的若干私有成員、公有成員及保護成員。完好定義的類一旦建立,就可看成完全封裝的實體,可以作為一個整體單元使用。類的實際內部工作隱藏起來,使用完好定義的類的用戶不需要知道類是如何工作的,只要知道如何使用它即可。
C++語言的程序因為要體現高性能,所以都是編譯型的。但其開發環境,為了方便測試,將調試環境做成解釋型的。即開發過程中,以解釋型的逐條語句執行方式來進行調試,以編譯型的脫離開發環境而啟動運行的方式來生成程序最終的執行代碼。
參考資料來源:網路-C++
③ C語言中HWND屬於哪個庫函數
這不是函數,這是類型
④ 學習windows程序設計中,請問這句是什麼意思呢把一個什麼東西給hwnd了還有C語言有函數名直接賦值的么
hwnd是Window編程中的句柄,用來標識一個對象(這個對象的意思不是編程語言中的對象),h代表"handle"(句柄),後面wnd就是說明這個句柄是一個窗口句柄,C語言中可以寫函數名賦給一個函數指針或者void指針,不過和這個hwnd不相幹了
⑤ 怎麼用C語言編寫一個windows窗口
調用window庫窗口函數即可創建windows窗口。
必須使用windows的編譯器,如VC,MS等等。
RegisterClassEx函數:
該函數注冊在隨後調用CreateWindow函數和CreateWindowEx函數中使用的窗口類。 RegisterClass函數己經由函數RegisterClassEx函數來代替,但是,如果不需要設置類的小目標則仍然可以使用RegisterClass函數。
CreateWindowEx函數:
該函數創建一個具有擴展風格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數相同。關於創建窗口和其他參數的內容,請參看CreateWindow。具體仍可見微軟的msdn。
消息處理函數WindowProc:
該函數是一個應用程序定義的函數。它處理發送給窗口的消息。WINDPROC類型定義了一個指向該回調函數的指針。WindowProc是用於應用程序定義函數的佔位符。
函數原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
參數:
hwnd:指向窗口的句柄。
uMsg:指定消息類型。
wParam:指定其餘的、消息特定的信息。該參數的內容與UMsg參數值有關。
IParam:指定其餘的、消息特定的信息。該參數的內容與uMsg參數值有關。
返回值:返回值就是消息處理結果,它與發送的消息有關。
一個簡單的Window的代碼如下:#include<Windows.h>
#include<tchar.h>
LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
intWinMain(
__inHINSTANCEhInstance,
__in_optHINSTANCEhPrevInstance,
__inLPSTRlpCmdLine,
__inintnShowCmd
)
{
TCHAR*szName=_T("myWindow");
WNDCLASSEXwc={0};
HWNDhWnd=NULL;
MSGMsg={0};
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//通過函數來設置一個白色的背景,這里大家設置為NULL看看,會很有趣的
wc.hCursor=NULL;//不設置
wc.hIcon=NULL;//不設置
wc.hIconSm=NULL;//不設置
wc.hInstance=hInstance;//當前程序的句柄,hInstance是有系統給傳遞的
wc.lpfnWndProc=WinProc;//窗口處理過程的回調函數。
wc.lpszClassName=szName;//窗口類的名字。
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&wc);//在系統中注冊
hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜歡"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//創建窗口,窗口標題為"我的窗口我喜歡"
if(hWnd==NULL)
{
MessageBox(NULL,_T("There'sanError"),_T("ErrorTitle"),MB_ICONEXCLAMATION|MB_OK);
return0;
}
ShowWindow(hWnd,nShowCmd);//顯示窗口
UpdateWindow(hWnd);
//下面是對消息的循環處理,大家先不必管這些,下節課我會細說的
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻譯消息
DispatchMessage(&Msg);//分派消息
}
returnMsg.message;
}
//消息處理函數
LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)
{
switch(Msg)//處理消息過程
{
caseWM_DESTROY://響應滑鼠單擊關閉按鈕事件
PostQuitMessage(0);//退出消息隊列
return0;//退出函數
}
returnDefWindowProc(hWnd,Msg,wParam,lParam);
}
⑥ C語言裡面,怎樣通過0x002D094E初始化一個HWND
HWND hWnd = reinterpret_cast< HWND >( 0x002D094 );
⑦ c語言中的俄羅斯方塊游戲里的一段,HWND wnd = GetHWnd();是什麼意思
c語言中的俄羅斯方塊游戲里的一段,HWND
wnd
=
GetHWnd();獲取窗口的句柄
⑧ c++ 如何輸出HWND句柄的值
HWND就像指針一樣(說白了就是指針), 它也是整型數據類型. 所以, 只需要強制類型轉換為int型就可以了.
HWNDwnd;
cout<<(int)wnd;
或者用C語言的方法:
HWNDwnd;
printf("%d",wnd);
C語言相比C++來說, 不需要強制類型轉換了 ,但是仍然需要寫%d. 所以怎麼使用需要看實際情況.
⑨ 如何用C語言編程出可視化界面
//調用api函數創建窗口
//示例:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口過程函數
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;//指定窗口類型,各種「類風格」(詳見下方↓)可以使用按位或操作符組合起來
wndclass.lpfnWndProc = WndProc;//指定窗口過程(必須是回調函數)
wndclass.cbClsExtra = 0;//預留的額外空間,一般為 0
wndclass.cbWndExtra = 0;//預留的額外空間,一般為 0
wndclass.hInstance = hInstance;//應用程序的實例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//為所有基於該窗口類的窗口設定一個圖標
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//為所有基於該窗口類的窗口設定一個滑鼠指針
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//指定窗口背景色
wndclass.lpszMenuName = NULL;//指定窗口菜單
wndclass.lpszClassName = szAppName;//指定窗口類名
if (!RegisterClass(&wndclass))//注冊窗口
{
MessageBox(NULL, TEXT("這個程序需要在 Windows NT 才能執行!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, //創建窗口
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)//回調函數
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("第一個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);
}
⑩ C++裡面的HWND是什麼
HWND 確切來說只在32位或更高的系統中存在,HWND 意為:Handle of WiNDow(窗體的把柄(或句柄)),這個詞來自匈牙利命名法。C++裡面調用API不能直接調用(對Kernel32.dll,User32.dll,gdi32.dll來說不是,應為程序已包含載入的代碼),而是先載入庫獲取函數指針(函數必須是C介面下的函數)才能調用,否則會有錯誤窗口出現。而還有一種方法,那就是載入靜態。這個不用我多說。那不是分號,是冒號 兩個冒號寫在一起是域操作符,與this指針中的->取間接成員相似,如 MapName(CtrlID,&Class::Mem())但在全局中兩個冒號寫在一起是C程序員為了快速瀏覽全局函數、宏、no_namespace'sClass的方法寫在宏一起會出錯。HWND 是C++類型之一。C++可以直接調用API不用聲明?至於這問題,我只能對您說無奈了我學編程2年多了我記得有一次我在病床上打開電腦,打開C語言,發現C語言如果缺少 #include 符 會編譯出錯我這才發現原來所有函數聲明都在 一個叫include 的文件夾中。