上一篇写的是一个单窗口的程序,这一次写一个多窗口的程序,第一个窗口都有自己的“特色”,ujfm任一个窗口都会发出beep声,关闭任何一个窗口都会关闭全部。
基本和上一个一样,只是多了几个重复的描述、注册、创建等过程。基本相同,所以只给代码。
#include<windows.h>
//声明窗口函数原型
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//---------------------------------------------------------------------------------------------
//主函数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE PreInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hwnd1; //Windows1的窗口句柄
HWND hwnd2; //Windows2的窗口句柄
HWND hwnd3; //Windows3的窗口句柄
MSG msg;
//定义、注册窗口类"窗口1"
char lpszClassName1[]="窗口1";
WNDCLASS wc1;
wc1.style=0;
wc1.lpfnWndProc=WndProc;
wc1.cbClsExtra=0;
wc1.cbWndExtra=0;
wc1.hInstance=hInstance;
wc1.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc1.hCursor=LoadCursor(NULL,IDC_ARROW);
wc1.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//白色
wc1.lpszMenuName=NULL;
wc1.lpszClassName=lpszClassName1;
RegisterClass(&wc1);
//定义、注册窗口类"窗口2"
char lpszClassName2[]="窗口2";
WNDCLASS wc2;
wc2.style=0;
wc2.lpfnWndProc=WndProc;
wc2.cbClsExtra=0;
wc2.cbWndExtra=0;
wc2.hInstance=hInstance;
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//灰色
wc2.lpszMenuName=NULL;
wc2.lpszClassName=lpszClassName2;
RegisterClass(&wc2);
hwnd1=CreateWindow( lpszClassName1, //创建Windows1窗口
"Windows1",
WS_OVERLAPPEDWINDOW,
120,50,700,500,
NULL,
NULL,
hInstance,
NULL);
hwnd2=CreateWindow( lpszClassName2, //创建Windows2窗口
"Windows2",
WS_OVERLAPPEDWINDOW,
150,80,750,550,
NULL,
NULL,
hInstance,
NULL);
hwnd3=CreateWindow( lpszClassName1, //创建Windows3窗口
"Windows3",
WS_OVERLAPPEDWINDOW,
200,130,500,300,,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd1,nCmdShow); //显示Windows1
UpdateWindow(hwnd1);
ShowWindow(hwnd2,nCmdShow); //显示Windows2
UpdateWindow(hwnd2);
ShowWindow(hwnd3,nCmdShow); //显示Windows3
UpdateWindow(hwnd3);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//---------------------------------------------------------------------------------------------
//处理消息的窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONDOWN:
{
MessageBeep(0);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}