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

本文介绍如何在两个Windows程序中实现消息传递,使一个窗口能向另一个窗口发送退出消息,从而控制其关闭。文章详细展示了创建两个窗口的过程,并通过代码示例解释了如何注册窗口类、创建窗口实例以及设置窗口过程函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务:

<写一个窗口程序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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值