當前位置:編程學習大全網 - 編程語言 - C++ 中如何使用API函數 生成壹個窗體?

C++ 中如何使用API函數 生成壹個窗體?

生產窗體可以使用CreateWindowEx函數。

函數功能:該函數創建壹個具有擴展風格的層疊式窗口、彈出式窗口或子窗口,其他與CreateWindow函數相同。

函數原型:

CreateWindowEx函數創建壹個層疊的,自動彈出的(pop-up)或是壹個子窗口通過擴展格式。另外這個函數的作用與CreateWindow函數的作用相同。要獲得更多的關於創建窗口的信息和關於CreateWindowEx函數參數的詳細描述。參見CreateWindow

HWND CreateWindowEx(

DWOR DdwExStyle, //窗口的擴展風格

LPCTSTR lpClassName, //指向註冊類名的指針

LPCTSTR lpWindowName,? //指向窗口名稱的指針

DWORD dwStyle,? //窗口風格

int x,? //窗口的水平位置

int y,? //窗口的垂直位置

int nWidth, //窗口的寬度

int nHeight, //窗口的高度

HWND hWndParent, //父窗口的句柄

HMENU hMenu, //菜單的句柄或是子窗口的標識符

HINSTANCE hInstance, //應用程序實例的句柄

LPVOID lpParam? //指向窗口的創建數據

);

例程:

include<windows.h>

#include<stdio.h>

LRESULT?CALLBACK?WinDouProc(

HWND?hwnd,?//?handle?to?window

UINT?uMsg,?//?message?identifier

WPARAM?wParam,?//?first?message?parameter

LPARAM?lParam//?second?message?parameter

);

class?CWnd

{

public:

CWnd()

{

m_hWnd?=?NULL;

}

BOOL?CreateEx(

DWORD?dwExStyle,?//?extended?window?style

LPCTSTR?lpClassName,?//?pointer?to?registered?class?name

LPCTSTR?lpWindowName,?//?pointer?to?window?name

DWORD?dwStyle,//?window?style

int?x,//?horizontal?position?of?window

int?y,//?vertical?position?of?window

int?nWidth,//?window?width

int?nHeight,?//?window?height

HWND?hWndParent,?//?handle?to?parent?or?owner?window

HMENU?hMenu,?//?handle?to?menu?or?child-window?identifier

HANDLE?hInstance,?//?handle?to?application?instance

LPVOID?lpParam//?pointer?to?window-creation?data

);

BOOL?ShowWindow(?int?nCmdShow?);

BOOL?UpdateWindow();

public:

HWND?m_hWnd;

};

BOOL?CWnd::CreateEx(

DWORD?dwExStyle,?//?extended?window?style

LPCTSTR?lpClassName,?//?pointer?to?registered?class?name

LPCTSTR?lpWindowName,?//?pointer?to?window?name

DWORD?dwStyle,//?window?style

int?x,//?horizontal?position?of?window

int?y,//?vertical?position?of?window

int?nWidth,//?window?width

int?nHeight,?//?window?height

HWND?hWndParent,?//?handle?to?parent?or?owner?window

HMENU?hMenu,?//?handle?to?menu?or?child-window?identifier

HANDLE?hInstance,?//?handle?to?application?instance

LPVOID?lpParam//?pointer?to?window-creation?data

)

{

m_hWnd?=?::CreateWindowEx?(dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam);

if(m_hWnd?!=?NULL)

return?TRUE;

else

return?FALSE;

}

BOOL?CWnd::ShowWindow(int?nCmdShow)

{

return?::ShowWindow(m_hWnd,nCmdShow);

}

BOOL?CWnd::UpdateWindow()

{

return?::UpdateWindow(m_hWnd);

}

int?WINAPI?WinMain(

HINSTANCE?hInstance,?//?handle?to?current?instance

HINSTANCE?hPrevInstance,?//?handle?to?previous?instance

LPSTR?lpCmdLine,?//?pointer?to?command?line

int?nCmdShow?//?show?state?of?window

)

{

WNDCLASS?wndclass;?//先設計窗口類

wndclass.cbClsExtra?=?0;

wndclass.cbWndExtra?=?0;

wndclass.hbrBackground?=?(HBRUSH)GetStockObject(DKGRAY_BRUSH);

wndclass.hCursor?=?LoadCursor(NULL,IDC_HELP);

wndclass.hIcon?=?LoadIcon(NULL,IDI_WARNING);

wndclass.hInstance?=?hInstance;

wndclass.lpfnWndProc?=?WinDouProc;

wndclass.lpszClassName?=?"Magic_Maggie";

wndclass.lpszMenuName?=?0;

wndclass.style?=?CS_VREDRAW?|?CS_HREDRAW;

//某壹個變量原油幾個變量去掉壹個特征,可以用取反(~)後再進行與(&)

//例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE;

RegisterClass(&wndclass);?///註意先建立再註冊昂

CWnd?wnd;

wnd.CreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);

wnd.ShowWindow(SW_SHOWNORMAL);

wnd.UpdateWindow();

MSG?msg;?//消息循環

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);//觸發WinDouProc

}

return?0;

}

LRESULT?CALLBACK?WinDouProc(

HWND?hwnd,?//?handle?to?window

UINT?uMsg,?//?message?identifier

WPARAM?wParam,?//?first?message?parameter

LPARAM?lParam//?second?message?parameter

)

{

switch(uMsg)

{

case?WM_LBUTTONDOWN:

MessageBox(hwnd,"您按下了鼠標左鍵昂","豆豆的程序",MB_OK);

HDC?hdc;

hdc?=?GetDC(hwnd);

//The?GetDC?function?retrieves?a?handle?to?a?display?device?context?for?the?client?area?of?a?specified?window?or?for?the?entire?screen.?You?can?use?the?returned?handle?in?subsequent?GDI?functions?to?draw?in?the?device?context.

TextOut(hdc,0,0,"感謝您對豆豆程序的支持昂",strlen("感謝您對豆豆程序的支持昂"));

ReleaseDC(hwnd,hdc);

break;

case?WM_CHAR:

char?szChar[20];

sprintf(szChar,"Char?is?%d",wParam);

MessageBox(hwnd,szChar,"豆豆的程序",MB_OK);

break;

case?WM_PAINT:

PAINTSTRUCT?ps;

HDC?hDc;

hDc?=?BeginPaint(hwnd,&ps);

TextOut(hDc,0,0,"這個是重繪滴哦",strlen("這個是重繪滴哦"));

EndPaint(hwnd,&ps);

break;

case?WM_CLOSE://這個case與下邊的destroy這個case不要弄錯了,否則窗口不出現,但任務管理器中運行

if(IDYES?==?MessageBox(hwnd,"您真的要退出麽?","豆豆的程序",MB_YESNO))

{

DestroyWindow(hwnd);

}

break;

case?WM_DESTROY:

PostQuitMessage(0);

//////////////////////////////////////////?

break;

default:

return?DefWindowProc(hwnd,uMsg,wParam,lParam);?//?別忘記了return

}

return?0;

}

  • 上一篇:幼兒教育教學價值研究論文
  • 下一篇:伸縮門遙控器匹配方法是什麽呢? 如何學會電動門的遙控編碼
  • copyright 2024編程學習大全網