windows七个消息队列

windows七个消息队列

windows七个消息队列

文章目录


消息队列

cpp 复制代码
/************************************************************************
Module: CopyData.cpp
Notices: Copyright(c) 2008 Jeffrey Ritcher & Christophe Nasarre
************************************************************************/

#include "CmnHdr.h"
#include "resource.h"
#include <malloc.h>
#include <tchar.h>
#include <windowsx.h>

//
BOOL Dlg_OnCopyData(HWND hWnd, HWND hWndFrom, PCOPYDATASTRUCT pcds) {
	Edit_SetText(GetDlgItem(hWnd, pcds->dwData ? IDC_DATA2 : IDC_DATA1),
		(PTSTR)pcds->lpData);
	return (TRUE);
}

//

//
BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {
	chSETDLGICONS(hWnd, IDI_COPYDATA);

	//初始化编辑框
	Edit_SetText(GetDlgItem(hWnd, IDC_DATA1), TEXT("测试数据"));
	Edit_SetText(GetDlgItem(hWnd, IDC_DATA2), TEXT("其他测试数据"));
	return (TRUE);
}

//
void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtrl, UINT codeNotify) {
	switch (id) {
	case IDCANCEL:
		EndDialog(hWnd, id);
		break;

	case IDC_COPYDATA1:
	case IDC_COPYDATA2:
		if (codeNotify != BN_CLICKED)
			break;

		//获取相应的文本框
		HWND hWndEdit = GetDlgItem(hWnd,
			(id == IDC_COPYDATA1) ? IDC_DATA1 : IDC_DATA2);

		//准备一个COPYDATASTRUCT结构体,其内容会被Copy到
		//一个内存映像文件中
		COPYDATASTRUCT cds;

		//指示哪个数据域的内容要被发送(0=ID_DATA1,1=ID_DATA2)
		cds.dwData = (DWORD)((id == IDC_COPYDATA1) ? 0 : 1);

		//获取文本的长度(字节)
		cds.cbData = (Edit_GetTextLength(hWndEdit) + 1) * sizeof(TCHAR);

		//在栈中分配一个内容以保存字符串内容
		cds.lpData = _alloca(cds.cbData);//此功能已弃用,更安全的版本可用;见_malloca

		//将编辑框里的字符串存到cbs.lpData中
		Edit_GetText(hWndEdit, (PTSTR)cds.lpData, cds.cbData);

		//获取应用程序的标题
		TCHAR szCaption[100];
		GetWindowText(hWnd, szCaption, sizeof(szCaption) / sizeof(szCaption[0]));

		//枚举所有具有相同标题的顶层窗口
		HWND hWndT = NULL;
		do
		{
			hWndT = FindWindowEx(NULL, hWndT, NULL, szCaption);
			if (hWndT != NULL)
			{
				FORWARD_WM_COPYDATA(hWndT, hWnd, &cds, SendMessage);
			}
		} while (hWndT != NULL);
		break;
	}
}

//
INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

	switch (uMsg) {
		chHANDLE_DLGMSG(hWnd, WM_INITDIALOG, Dlg_OnInitDialog);
		chHANDLE_DLGMSG(hWnd, WM_COMMAND, Dlg_OnCommand);
		chHANDLE_DLGMSG(hWnd, WM_COPYDATA, Dlg_OnCopyData);
	}

	return (FALSE);
}

//
int WINAPI _tWinMain(HINSTANCE hInstExe, HINSTANCE hPrev, PTSTR lpCmdLIne, int nShowCmd) {
	DialogBox(hInstExe, MAKEINTRESOURCE(IDD_COPYDATA), NULL, Dlg_Proc);
	return 0;
}
相关推荐
带娃的IT创业者4 小时前
Windows 平台上基于 MCP 构建“文心一言+彩云天气”服务实战
人工智能·windows·文心一言·mcp
csdn_aspnet6 小时前
Windows Node.js 安装及环境配置详细教程
windows·node.js
摇滚侠7 小时前
java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割
java·windows·list
Source.Liu7 小时前
【Pywinauto库】12.2 pywinauto.element_info 后端内部实施模块
windows·python·自动化
Source.Liu7 小时前
【Pywinauto库】12.1 pywinauto.backend 后端内部实施模块
开发语言·windows·python·自动化
私人珍藏库7 小时前
[Windows] FileOptimizer v17.1.0_一款文件批量压缩工具
windows·批量压缩
掘根7 小时前
【CMake】List
windows·microsoft·list
TToolss10 小时前
删除文件夹里的网盘图标
windows
bikong711 小时前
Qt/C++,windows多进程demo
c++·windows·qt
csdn_aspnet14 小时前
Windows、Linux 系统 nodejs 和 npm 版本更新及错误修复
linux·windows·npm·node.js