您的位置:首页 > 其它

实习随手记-win32创建窗口操作

2017-05-31 17:54 274 查看
任务:

<写一个窗口程序A 并能够接收退出消息, 写第二程序B 向A窗口发送退出消息 ,让A退出>

#include<Windows.h>
#include<tchar.h>
#include<string.h>
#include<stdio.h>

//声明窗口处理函数
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lparam
);

LRESULT CALLBACK WindowProcSend(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lparam
);
//主程序入口
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInatance,
LPSTR lpCmdLine,
int nCmdShow
)
{

//LPTSTR get=GetCommandLine();
//MessageBox(NULL, get, _T("警告"), MB_OK);

WNDCLASS wndclass;
wndclass.lpfnWndProc = WindowProc;//lpfnWndProc参数就是用来设置你用哪个WindowProc来处理消息,前面我说过,我们只要不更改回调函数的返回值和参数的类型和顺序,就可以随意设置函数的名字,那为什么系统可以找到我们用的回调函数呢,对的,就是通过lpfnWndProc传进去的,它是一个函数指针,也就是它里面保存的是我们定义的WindowProc的入口地址,使用很简单,我们只需要把函数的名字传给它就可以了。
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpszClassName = _T("窗体1");
wndclass.hInstance = hInstance;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = 0;
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = 0;

//注册窗口类
RegisterClass(&wndclass);
//创建窗口实列
HWND hWndGet = CreateWindow(_T("窗体1"), _T("接收窗"), WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, 0, 0, hInstance, 0);
//显示窗口
ShowWindow(hWndGet, SW_SHOW);

WNDCLASS wndclass1;
wndclass1.lpfnWndProc = WindowProcSend;//lpfnWndProc参数就是用来设置你用哪个WindowProc来处理消息,前面我说过,我们只要不更改回调函数的返回值和参数的类型和顺序,就可以随意设置函数的名字,那为什么系统可以找到我们用的回调函数呢,对的,就是通过lpfnWndProc传进去的,它是一个函数指针,也就是它里面保存的是我们定义的WindowProc的入口地址,使用很简单,我们只需要把函数的名字传给它就可以了。
wndclass1.cbClsExtra = 0;
wndclass1.cbWndExtra = 0;
wndclass1.style = CS_HREDRAW | CS_VREDRAW;
wndclass1.lpszClassName = _T("窗体2");
wndclass1.hInstance = hInstance;
wndclass1.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass1.hIcon = 0;
wndclass1.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass1.lpszMenuName = 0;

//注册窗口类
RegisterClass(&wndclass1);
//创建窗口实列
HWND hWndS = CreateWindow(_T("窗体2"), _T("发送窗"), WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, 0, 0, hInstance, 0);
//显示窗口
ShowWindow(hWndS, SW_SHOW);

//消息循环
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//定义收窗口处理函数
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM IParam
)
{
switch (uMsg)
{
case WM_CLOSE:
{
DestroyWindow(hwnd);
}
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, IParam);
}
return 0;
}

LRESULT CALLBACK WindowProcSend(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM IParam
)
{
switch (uMsg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_CHAR:
{
MessageBox(hwnd, _T("确定关闭接收窗?"), _T("警告"), MB_OK);
HWND hWndG = ::FindWindow(NULL, _T("接收窗"));
if (hWndG != NULL)
{
::SendMessage(hWndG, WM_CLOSE, 0, 0);
}
}
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, IParam);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: