1   窗体注冊和创建

1.1WIN32 窗体程序创建步骤

1、WinMain入口函数的定义

2、WindowProc函数的定义

3、注冊窗体类

RegisterClass、RegisterClassEX

4、创建窗体

CreateWindow、CreateWindowEx

HWND CreateWindow(

LPCTSTRlpClassName,//指向已注冊的窗体类的名称的指针

LPCTSTRlpWindowName,//指向窗体名称的指针

DWORDdwStyle,//窗体的风格

intx,//窗体位置的X坐标

inty,//窗体位置的Y坐标

intnWidth,//窗体的宽度

intnHeight,//窗体的高度

HWNDhWndParent,//父窗体的句柄

HMENUhMenu,//窗体菜单句柄

HINSTANCEhInstance,//应用程序使用句柄

LPVOIDlpParam//应用程序数据区句柄

);

參数:

lpClassName

一个指向以零结尾的字符串的指针。或者指向曾经由RegisterClass或RegisterClassEx条用创建的原子的指针。这个原子必须是次參数的低位。高位必须是0。假设是一个字符串,它指定窗体类的名称。类名能够是用RegisterClass或RegisterClassEx注冊过的不论什么名称。providedthat themodule that registers the class is also the module thatcreates the window.类名称也能够是不论什么提前定义的系统类名称。

lpWindowName

指向指定窗体名称的以零结尾的字符串的指针。

假设窗体的风格指定了一个标题栏,则它将会显示在标题栏上。当使用CreateWindow创建控件时,此參数指定控件的文字。当用SS_ICON风格创建static控件时。此參数指定图标的名称或者标识符。要指定一个标识符。使用”#num”语法。

dwStyle

指定要创建窗体的风格。

能够是窗体风格的组合,加上控件的风格的组合。

x

指定窗体的初始水平位置。

对于overlapped或者弹出式窗体。x參数是初始的x坐标相当窗体的左上角,在屏幕坐标系上。Fora childwindow, x is the x-coordinate of the upper-left corner ofthe window relative tothe upper-left corner of the parent window'sclientarea.假设參数值被设置为CW_USEDEFAULT,系统为窗体左上角选择默认的位置并忽略y參数。CW_USEDEFAULT仅对overlapped窗体有效,假设它在弹出窗体或者自窗体上被指定。则x和y參数被设置为零。

y

指定窗体的初始化垂直位置。

对于交叠式窗体或者弹出式窗体,y參数是在屏幕坐标上初始的窗体左上角的y坐标。

对于子窗体。y是和父窗体客户区左上角相关的初始子窗体左上角的y坐标。

对于listbox控件。y是和父窗体客户区左上角相关的listbox客户区初始的左上角的y坐标。

假设用WS_VISIBLE风格创建一个overlapped窗体而且x參数设置为CW_USEDEFAULT,系统忽略y參数。

nWidth

用设备单位指定窗体的宽度。对于overlapped窗体,nWidth參数既能够是在屏幕坐标上窗体的宽度。也能够是CW_USEDEFAULT.假设nWidth是CW_USEDEFAULT,系统选择一个默认的宽度和高度。这个默认的宽度从初始的x坐标到屏幕的右边缘。默认的高度从y坐标到图标区的顶端。

CW_USEDEFAULT仅对overlapped窗体可用,假设对子窗体或者弹出窗体设置了CW_USEDEFAULT,则nWidth和nHeight被设置为0。

nHeight

指定窗体的高度用设备单位。

对于overlapped窗体,nHeight是在屏幕坐标上窗体的高度。

假设nWidth被设置为CW_USEDEFAULT,系统忽略nHeight。

hWndParent

指向被创建窗体的父窗体或者全部者窗体的句柄。要创建一个子窗体或者一个被全部的窗体,提供一个有效的窗体句柄。

这个參数对于弹出式窗体是可选的。

hMenu

菜单句柄,或者指定一个依靠窗体风格的子窗体标识符。

对于overlapped窗体或者弹出式窗体,hMenu识别窗体要使用的菜单。能够是NULL假设使用类的菜单。对于子窗体。hMenu指定自窗体的标识符,一个用来通知父窗体对话框控件的事件的整数。程序决定子窗体的标识,他对于同样父窗体的全部子窗体必须是唯一的。

hInstance

Windows95/98/Me: 和这个窗体有关系的模块的实例句柄。

WindowsNT/2000/XP: 此值被忽略。

lpParam

[in]Pointer to a value to be passed to the window through theCREATESTRUCT structurepassed in the lpParam parameter theWM_CREATE message. 假设一个程序通过调用CreateWindow创建多文档界面的客户窗体。

lpParam必须指向一个CLIENTCREATESTRUCT结构。

5、窗体的显示和刷新

ShowWindow、 UpdateWindow

6、消息处理

GetMessage、 DispatchMessage

7、窗体退出

WM_DESTROY、

1.2窗体的注冊

1.2.1窗体类的分类

1、  系统全局窗体类,比方按钮(BUTTOn),文本编辑框(EDITed)等

2、  应用程序的全局窗体类。能够在一个应用程序中EXE、DLL等全部模块中使用的窗体类。

3、  局部窗体类。

仅仅能在本模块中使用的窗体类。

1.2.2实现窗体类的注冊

1、  系统全局的窗体类。无需注冊直接使用

使用CreateWindow函数,在CLASSNAME中指定系统已经定义好的窗体类型名称就可以。

以下创建一个BUtton或者EDIt窗体

/*File : botton.cpp
*Auth : sjin
*Date : 20140618
*Mail : 413977243@qq.com
*/ /*窗体的创建的练习*/ #include <Windows.h>
#include <WinNT.h> HINSTANCE g_hInst = NULL; /*窗体处理函数*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM iParam)
{
return DefWindowProc(hWnd,nMsg,wParam,iParam);
} /*创建BUTTON*/
HWND CreateButton()
{ /*BUTTOn */
#if 0
HWND hWnd = CreateWindow(
"BUTTON","My first button test",
WS_OVERLAPPEDWINDOW,0,0,100,150,
NULL,NULL,g_hInst,NULL);
#else
HWND hWnd = CreateWindow(
"EDIT","My first button test",
WS_OVERLAPPEDWINDOW,0,0,100,150,
NULL,NULL,g_hInst,NULL);
#endif
return hWnd;
} /*注冊*/ BOOL RegisterWnd(LPSTR pszClassName)
{
WNDCLASSEX hWnd = {'\0'}; hWnd.cbSize = sizeof(hWnd);
hWnd.style = CS_VREDRAW | CS_HREDRAW;
hWnd.lpfnWndProc = WndProc;
hWnd.cbClsExtra = 0;
hWnd.cbWndExtra = 0;
hWnd.hCursor = NULL;
hWnd.hIcon = NULL;
hWnd.hbrBackground = HBRUSH(COLOR_BTNFACE +1);
hWnd.lpszClassName = pszClassName;
hWnd.hInstance = g_hInst; ATOM nAtom = RegisterClassEx(&hWnd); if( 0 == nAtom) {
return FALSE;
}
return TRUE; } /*显示窗体*/ void DisplayButton(HWND hwnd)
{
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
} void Message()
{
MSG msg = {0}; while(GetMessage(&msg,NULL,0,0)){
/*文本框可输入*/
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} /*入口函数*/
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR pszCmcLine,
int nShowCmd)
{
g_hInst = hInst; HWND hwnd = CreateButton(); RegisterWnd("");
DisplayButton(hwnd); Message();
return 0;
}

2、  应用程序全局窗体类,须要用代码实现注冊。在注冊时须要添加CS_CLOBALCLASS(各个模块中都能够使用的)定义的实现方式:

WNDCLASS wc = {'\0'};

wc.style          = CS_CLOBALCLASS |CS_HREARAW;

RegisterClass(&wc);

以下的样例基本都是一样的

3、  局部窗体类。不是添加CS_CLOBALCLASS定义

使用RegisterClass、RegisterClassEX来注冊

/*File : winreg.cpp
*Auth : sjin
*Date : 20140619
*Mail : 413977243@qq.com
*/ /*窗体的创建的练习*/ #include <Windows.h>
#include <WinNT.h> HINSTANCE g_hInst = NULL; /*窗体处理函数*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM iParam)
{
return DefWindowProc(hWnd,nMsg,wParam,iParam);
} /*创建window*/
HWND Createwindow(LPSTR pszClassName)
{ HWND hWnd = CreateWindow(
pszClassName,"My first wondow test",
WS_OVERLAPPEDWINDOW,0,0,100,150,
NULL,NULL,g_hInst,NULL);
return hWnd;
} /*注冊*/ BOOL RegisterWnd(LPSTR pszClassName)
{
WNDCLASSEX hWnd = {'\0'}; hWnd.cbSize = sizeof(hWnd);
hWnd.style = CS_VREDRAW | CS_HREDRAW;
hWnd.lpfnWndProc = WndProc;
hWnd.cbClsExtra = 0;
hWnd.cbWndExtra = 0;
hWnd.hCursor = NULL;
hWnd.hIcon = NULL;
hWnd.hbrBackground = HBRUSH(COLOR_BTNFACE +1);
hWnd.lpszClassName = pszClassName;
hWnd.hInstance = g_hInst; ATOM nAtom = RegisterClassEx(&hWnd); if( 0 == nAtom) {
return FALSE;
}
return TRUE; } /*显示窗体*/ void DisplayWnd(HWND hwnd)
{
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
} void Message()
{
MSG msg = {0}; while(GetMessage(&msg,NULL,0,0)){
/*文本框可输入*/
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} /*入口函数*/
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR pszCmcLine,
int nShowCmd)
{
g_hInst = hInst; RegisterWnd("MYWIN"); HWND hwnd = Createwindow("MYWIN"); DisplayWnd(hwnd); Message();
return 0;
}

注:上面程序中存在一个问题。就是程序关闭后,并没有全然退出,还在后台执行。问了解决问题,须要在窗体处理函数做以下的改动:

/*窗体处理函数*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM iParam)
{
switch(nMsg){
case WM_DESTROY:
/*添加这个程序能够正常的退出*/
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,nMsg,wParam,iParam);
}

1.1.1窗体类风格

CS_HREDRAW 窗体水平变化,又一次绘制窗体。

CS_VREDRAW 窗体垂直变化。又一次绘制窗体。

CS_DBCLICK 窗体能够接收鼠标双击消息

CS_GLOBALCLASS 创建应用程序全局窗体类。

CS_BYTEALIGNWINDOW 窗体对齐方式,以8的倍数对齐

CS_BYTEALIGNCLIENT 窗体客户区对齐方式,以8的倍数对齐

CS_CLASSDC 全部这样的类型的窗体使用同一个DC(设备描写叙述表,画图使用)

CS_OWNDC 每一个窗体拥有自己的DC

CS_PARENTDC 使用父窗体的DC

CS_SAVEBITS是用位图保存窗体界面,能够提高窗体界面的刷新性能CS_NOCLOSE 禁止关闭命令

1.1.2窗体类的附加数据 cbClsExtra

在窗体类的数据信息中能够加入自己的信息

cbClsExtra 用于加入信息的内存的大小。

SetClassLong 将信息保存到内存中

GetClassLong 将信息从内存中取出

1.1.3窗体附加数据cbWndExtra

在窗体的数据信息中能够加入自己的信息

cbWndExtra 用于加入信息的内存的大小。

SetWindowLong 将信息保存到内存中

GetWindowLong 将信息从内存中取出

以下代码演示样例:

/*File : winreg.cpp
*Auth : sjin
*Date : 20140619
*Mail : 413977243@qq.com
*/ /*窗体的创建的练习*/ #include <Windows.h>
#include <WinNT.h>
#include <stdio.h> HINSTANCE g_hInst = NULL; /*窗体处理函数*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM iParam)
{
switch(nMsg){
case WM_DESTROY:
/*添加这个程序能够正常的退出*/
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,nMsg,wParam,iParam);
} /*创建window*/
HWND Createwindow(LPSTR pszClassName)
{ HWND hWnd = CreateWindow(
pszClassName,"My first wondow test",
WS_OVERLAPPEDWINDOW,0,0,100,150,
NULL,NULL,g_hInst,NULL);
return hWnd;
} /*注冊*/ BOOL RegisterWnd(LPSTR pszClassName)
{
WNDCLASSEX hWnd = {'\0'}; hWnd.cbSize = sizeof(hWnd);
/*
*
*CS_HREDRAW 窗体水平变化。又一次绘制窗体。
*CS_VREDRAW 窗体垂直变化。又一次绘制窗体。 *CS_DBCLICK 窗体能够接收鼠标双击消息
*CS_GLOBALCLASS 创建应用程序全局窗体类。
*CS_BYTEALIGNWINDOW 窗体对齐方式,以8的倍数对齐
*CS_BYTEALIGNCLIENT 窗体客户区对齐方式,以8的倍数对齐
*CS_CLASSDC 全部这样的类型的窗体使用同一个DC(设备描写叙述表,画图使用)
*CS_OWNDC 每一个窗体拥有自己的DC
*CS_PARENTDC 使用父窗体的DC
*CS_SAVEBITS 是用位图保存窗体界面,能够提高窗体界面的刷新性能
*CS_NOCLOSE 禁止关闭命令.
*/
hWnd.style = CS_VREDRAW | CS_HREDRAW;
hWnd.lpfnWndProc = WndProc;
hWnd.cbClsExtra = 100;
hWnd.cbWndExtra = 100;
hWnd.hCursor = NULL;
hWnd.hIcon = NULL;
hWnd.hbrBackground = HBRUSH(COLOR_BTNFACE +1);
hWnd.lpszClassName = pszClassName;
hWnd.hInstance = g_hInst; ATOM nAtom = RegisterClassEx(&hWnd); if( 0 == nAtom) {
return FALSE;
}
return TRUE; } /*显示窗体*/ void DisplayWnd(HWND hwnd)
{
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
} void Message()
{
MSG msg = {0}; while(GetMessage(&msg,NULL,0,0)){
/*文本框可输入*/
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} /*设置附加数据*/
void SetExtra(HWND hWnd)
{
SetClassLong(hWnd,1,100);
SetWindowLong(hWnd,1,200);
} /*获取附加数据*/
void GetExtra(HWND hWnd)
{
DWORD nClass = GetClassLong(hWnd,1);
DWORD nWnd = GetWindowLong(hWnd,1); char szText[256]= {0};
sprintf(szText,"CLS:%d WND:%d",nClass,nWnd);
MessageBox(NULL,szText,"EXTRA",MB_OK);
}
/*入口函数*/
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR pszCmcLine,
int nShowCmd)
{
g_hInst = hInst; RegisterWnd("MYWIN"); HWND hwnd = Createwindow("MYWIN");
HWND hwnd2 = Createwindow("MYWIN");
SetExtra(hwnd);
GetExtra(hwnd);
GetExtra(hwnd2); DisplayWnd(hwnd); Message();
return 0;
}

1.1创建窗体

1.1.1窗体创建函数

CreateWindow/CreateWindowEx

HWND CreateWindowEx(

DWORD dwExStyle,//窗体的扩展样式

LPCTSTR lpClassName,  // pointer to registered class name

LPCTSTR lpWindowName, //pointer to window name

DWORD dwStyle,        // window style

int x,                // horizontal position ofwindow

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-windowidentifier

HINSTANCE hInstance,  // handle to application instance

LPVOID lpParam );     // pointer to window-creation data

1.1.2窗体的风格及扩展风格

窗体风格: WS_XXXX定义的风格,是窗体的基本风格.

扩展风格:WS_EX_XXXXX 定义的风格,是窗体的扩展风格.比方: ToolWindow窗体等等。

在CreateWindow能够使用基本窗体风格,扩展的窗体风格,须要使用CreateWindowEx设置.    
 WS_OVERLAPPED窗体,层叠式窗体
   WS_POPUP窗体,弹出式窗体
   WS_CHILD窗体,子窗体

1.1.3子窗体和父窗体

CreateWindow时,指定父窗体

将窗体的风格添加WS_CHILD

能够使用SetParent和GetParent函数设置和获取指定窗体的父窗体.

其它: MoveWindow 移动窗体

以下是关于父子窗体的演示样例

/* File : createWindow.cpp
* Auth : sjin
* Date : 20140623
* Mail : 413977243@qq.com
*/ #include <Windows.h>
#include <stdio.h> HINSTANCE g_hInst = NULL; /*父窗体处理函数*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam)
{
switch(nMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, nMsg, wParam, lParam);
} /*子窗体处理函数*/
LRESULT CALLBACK ChildProc(HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, nMsg, wParam, lParam);
} /*注冊窗体*/
BOOL RegisterWnd(LPSTR pszClassName,WNDPROC proc,int nBrush)
{
WNDCLASSEX wce = {0};
wce.cbSize = sizeof(wce);
wce.style = CS_VREDRAW|CS_HREDRAW;
wce.lpfnWndProc = proc;
wce.cbClsExtra = 100;
wce.cbWndExtra = 100;
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hbrBackground = HBRUSH(nBrush);
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.hInstance = g_hInst;
ATOM nAtom = RegisterClassEx(&wce);
if(0 == nAtom)
{
MessageBox(NULL, "registerError", "Error", MB_OK);
return FALSE;
}
return TRUE;
} /*创建窗体*/
HWND CreateWnd(LPSTR pszClassName,HWND hParent,DWORD dwStyle)
{
HWND hWnd = CreateWindowEx(
0, /*窗体扩展风格*/
//WS_EX_TOOLWINDOW, /*没有扩大和隐藏按钮*/
//WS_EX_CLIENTEDGE | WS_EX_CONTEXTHELP,
//WS_EX_PALETTEWINDOW,/**/
pszClassName,
"My Wnd",
dwStyle,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hParent, NULL, g_hInst, NULL); return hWnd;
} /*显示窗体*/
void DisplayWnd(HWND hWnd)
{
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
} /*消息*/
void Message()
{
MSG msg = {0};
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInt,
LPSTR lpCmdLine,
int nShowCmd)
{
g_hInst = hInst; /*注冊父窗体*/
RegisterWnd("parent",WndProc,COLOR_BTNFACE + 1); /*注冊子窗体*/
RegisterWnd("Child",ChildProc,COLOR_WINDOW);
/*注冊子窗体*/
RegisterWnd("Child1",ChildProc,COLOR_WINDOW); /*创建父窗体
* 注意 窗体类的名称必须和注冊时的名字一样。否则显示不了窗体
*/
HWND hMyWnd1 = CreateWnd("parent",NULL,WS_OVERLAPPEDWINDOW); /*创建子窗体*/
HWND hChild = CreateWnd("Child",hMyWnd1,WS_CHILD| WS_VISIBLE|WS_BORDER|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU);
HWND hChild1 = CreateWnd("Child1",hMyWnd1,WS_CHILD| WS_VISIBLE|WS_BORDER|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU); /*移动窗体*/
MoveWindow(hChild,100,100,100,100,TRUE);
/*移动窗体*/
MoveWindow(hChild1,100,200,100,100,TRUE); DisplayWnd(hMyWnd1); Message(); return 0;
}

MDI 窗体创建

/* File : mdiWindows.c
* Auth : sjin
* Date : 20140625
* Mail : 413977243@qq.com
*/ #include <Windows.h>
#include <stdio.h> HINSTANCE g_hInst = NULL;
HWND g_hMDIClient = NULL; /*主窗体处理函数*/
LRESULT CALLBACK MainProc(HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(nMsg){
case WM_DESTROY: PostQuitMessage(0);
return 0;
}
return DefFrameProc(hWnd,g_hMDIClient,nMsg,wParam,lParam);
} /*子窗体处理函数*/
LRESULT CALLBACK ChildProc(HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam)
{ return DefMDIChildProc(hWnd,nMsg,wParam,lParam);
} /*窗体注冊函数*/
BOOL RegisterWnd(LPSTR pszClassname,
WNDPROC Proc,
int nBrush)
{
WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce);
wce.style = CS_VREDRAW|CS_HREDRAW;
wce.lpfnWndProc = Proc;
wce.cbClsExtra = 100;
wce.cbWndExtra = 100;
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hbrBackground = HBRUSH(nBrush);
wce.lpszClassName = pszClassname;
wce.lpszMenuName = NULL;
wce.hInstance = g_hInst;
wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx(&wce);
if(0 == nAtom)
{
MessageBox(NULL, "registerError", "Error", MB_OK);
return FALSE;
}
return TRUE;
} /*创建主窗体*/ HWND createMainWnd(LPSTR pszClassName)
{
HWND hWnd = CreateWindowEx(0,
pszClassName,"MainWnd",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
g_hInst,
NULL); return hWnd;
} /*创建MDICLIENT窗体*/ HWND createMdiClient(HWND hParent)
{
/*创建时附件的数据
* MDICLIENT时必须的
*/
CLIENTCREATESTRUCT cs = {'\0'};
cs.idFirstChild = 1000;/*ID号*/ HWND hWnd = CreateWindowEx(0,
"MDICLIENT","MainWnd",
WS_CHILD|WS_VISIBLE,
0,
0,
500,
500,
hParent,
NULL,
g_hInst,
&cs); return hWnd;
} /**/
HWND createChildWnd(HWND hParent,LPSTR pszClassName)
{ HWND hWnd = CreateWindowEx(WS_EX_MDICHILD,
pszClassName,"ChildWnd",
WS_CHILD|WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hParent,
NULL,
g_hInst,
NULL); return hWnd;
} /*显示窗体*/
void DisplayWnd(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
} /*消息处理*/
void Message()
{
MSG msg = {'\0'};
while(GetMessage(&msg,NULL,0,0)){
DispatchMessage(&msg);
}
} /*main*/
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevINstance,
LPSTR lpCmdLine,
int ShowCmd)
{
/*注冊窗体*/
RegisterWnd("MainWnd",MainProc,COLOR_BTNFACE + 1); RegisterWnd("ChildWnd",ChildProc,COLOR_WINDOW); /*创建MDI主窗体*/
HWND hMain = createMainWnd("MainWnd"); /*创建MDICLIENT窗体*/
HWND hMdiClient = createMdiClient(hMain);
//MoveWindow(hMdiClient,0,0,500,500,TRUE); /*创建MDI子窗体*/
HWND hChild = createChildWnd(hMdiClient,"ChildWnd"); /*显示和消息处理*/
DisplayWnd(hMain);
Message();
return 0;
}

最新文章

  1. Webform Session、Cookies传值,跳转页面方式
  2. ffmpeg安装的问题
  3. Dell PowerVault TL4000 磁带机卡带问题
  4. JavaScript第一部分
  5. Ant、Maven、Gradle
  6. asp.net中分页与存储过程的一些总结
  7. Spring事务配置的五种方式 巨全!不看后悔,一看必懂!
  8. Android SDK Manager 无法更新SDK
  9. svg 文字
  10. Hibernate 多对多映射
  11. 他们控制的定义--让背景颜色变化ViewPager逐步幻灯片
  12. pcap filter
  13. 使用C# (.NET Core) 实现状态设计模式 (State Pattern)
  14. 记录一下小程序canvas
  15. 【爬坑】远程连接 MySQL 失败
  16. Study 6 —— while循环
  17. 将mysql的表导出为excel
  18. Mysql导入脚本失败,提示需要SUPER权限
  19. 浮动闭合最佳方案:clearfix
  20. Keil下Debug随笔

热门文章

  1. 原生JavaScript 封装ajax
  2. BZOJ4044: [Cerc2014] Virus synthesis(回文树+DP)
  3. vmware workstation15.1.0下载地址及密钥(亲测可用)
  4. [Javascript AST] 3. Continue: Write ESLint rule
  5. Java 函数的参数说
  6. 1.2 Use Cases中 Event Sourcing官网剖析(博主推荐)
  7. Jszip的使用和打包下载图片
  8. 日历控件input框默认显示当日日期
  9. CodeVs——T 3304 水果姐逛水果街Ⅰ
  10. Day2:字典