生產窗體可以使用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?identifierWPARAM?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;}