#include<windows.h>
HINSTANCE hinst;
HWND hwnd1;
HWND childhwnd[2];
TCHAR szAppName[]=TEXT("MTW"),szChild[]=TEXT("CHILD");
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK ChildWndProc(HWND,UINT,WPARAM,LPARAM);
int x=1;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
MSG msg;
WNDCLASS wndclass,wndclass1;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =szAppName;
wndclass.style =CS_HREDRAW|CS_VREDRAW;
wndclass.lpszMenuName =NULL;
//x=RegisterClass(&wndclass);
if( !(RegisterClass (&wndclass)))
{
MessageBox (NULL, TEXT ("error 100"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd1=CreateWindow(szAppName,
TEXT("子窗口"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,NULL,NULL);
wndclass.lpfnWndProc =ChildWndProc;
wndclass.lpszClassName =TEXT("CHILD");
wndclass.hbrBackground =(HBRUSH)GetStockObject(GRAY_BRUSH);
wndclass.cbWndExtra =20;
if( !(RegisterClass (&wndclass)))
{
MessageBox (NULL, TEXT ("error 101"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
ShowWindow(hwnd1,iCmdShow);
UpdateWindow(hwnd1);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
for(int i=0;i<2;i++)
{
childhwnd[i]=CreateWindow(TEXT("CHILD"),
NULL,
WS_VISIBLE | WS_CHILD,
0,0,0,0,
hwnd,
(HMENU)i,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL);
// MessageBox(NULL,"Success!",NULL,0);
}
x=GetLastError();
return 0;
case WM_SIZE:
x=MoveWindow(childhwnd[0],0,0,LOWORD(lParam)/2,HIWORD(lParam),TRUE);
MoveWindow(childhwnd[1],LOWORD(lParam),0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
LRESULT CALLBACK ChildWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
MessageBox(NULL,"success!",NULL,0);
case WM_SIZE:
InvalidateRect(hwnd,NULL,true);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
Rectangle(hdc,0,0,rect.right,rect.bottom);
EndPaint(hwnd,&ps);
return 0;
case WM_LBUTTONDOWN:
MessageBox(NULL,"第一个子窗口","fist",0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
HINSTANCE hinst;
HWND hwnd1;
HWND childhwnd[2];
TCHAR szAppName[]=TEXT("MTW"),szChild[]=TEXT("CHILD");
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK ChildWndProc(HWND,UINT,WPARAM,LPARAM);
int x=1;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
MSG msg;
WNDCLASS wndclass,wndclass1;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =szAppName;
wndclass.style =CS_HREDRAW|CS_VREDRAW;
wndclass.lpszMenuName =NULL;
//x=RegisterClass(&wndclass);
if( !(RegisterClass (&wndclass)))
{
MessageBox (NULL, TEXT ("error 100"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd1=CreateWindow(szAppName,
TEXT("子窗口"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,NULL,NULL);
wndclass.lpfnWndProc =ChildWndProc;
wndclass.lpszClassName =TEXT("CHILD");
wndclass.hbrBackground =(HBRUSH)GetStockObject(GRAY_BRUSH);
wndclass.cbWndExtra =20;
if( !(RegisterClass (&wndclass)))
{
MessageBox (NULL, TEXT ("error 101"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
ShowWindow(hwnd1,iCmdShow);
UpdateWindow(hwnd1);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
for(int i=0;i<2;i++)
{
childhwnd[i]=CreateWindow(TEXT("CHILD"),
NULL,
WS_VISIBLE | WS_CHILD,
0,0,0,0,
hwnd,
(HMENU)i,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL);
// MessageBox(NULL,"Success!",NULL,0);
}
x=GetLastError();
return 0;
case WM_SIZE:
x=MoveWindow(childhwnd[0],0,0,LOWORD(lParam)/2,HIWORD(lParam),TRUE);
MoveWindow(childhwnd[1],LOWORD(lParam),0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
LRESULT CALLBACK ChildWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
MessageBox(NULL,"success!",NULL,0);
case WM_SIZE:
InvalidateRect(hwnd,NULL,true);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
Rectangle(hdc,0,0,rect.right,rect.bottom);
EndPaint(hwnd,&ps);
return 0;
case WM_LBUTTONDOWN:
MessageBox(NULL,"第一个子窗口","fist",0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
wndclass.lpfnWndProc =ChildWndProc;
wndclass.lpszClassName =TEXT("CHILD");
wndclass.hbrBackground =(HBRUSH)GetStockObject(GRAY_BRUSH);
wndclass.cbWndExtra =20;
if( !(RegisterClass (&wndclass)))
{
MessageBox (NULL, TEXT ("error 101"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
放到
hwnd1=CreateWindow(szAppName,
TEXT("子窗口"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,NULL,NULL);
前面
并不造成冲突
把注册"CHILD"那段的wndclass改成wndclass1原因是WM_CREATE发生在CreateWindow创建窗口的过程中,此时CreateWindow还没执行完的
不然无法创建窗口
看这段SDK代码好亲切,想起当年默窗口过程的经历