VS2017中MFC的C++设计中给其它窗口发中文消息
VS2017中MFC的C++设计中给其它窗口发中文消息
// MFCApplication1Dlg.cpp: 实 现 文 件
//
#include “pch.h”
#include “framework.h”
#include “MFCApplication1.h”
#include “MFCApplication1Dlg.h”
#include “afxdialogex.h”
#include “resource.h”
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用 于 应 用 程 序 “ 关 于 ” 菜 单 项 的 CAboutDlg 对 话 框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对 话 框 数 据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支 持
// 实 现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP()
// CMFCApplication1Dlg 对 话 框
- CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /=nullptr/)
-
CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_MFCBUTTON1, m_SendBtn);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx) ON_WM_SYSCOMMAND()
ON_WM_PAINT() ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CMFCApplication1Dlg::OnBnClickedOk) ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_MFCBUTTON1, &CMFCApplication1Dlg::OnBnClickedMfcbutton1) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication1Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication1Dlg::OnBnClickedButton2)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 消 息 处 理 程 序
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将 “ 关 于 …” 菜 单 项 添 加 到 系 统 菜 单 中 。
// IDM_ABOUTBOX 必 须 在 系 统 命 令 范 围 内 。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid; CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设 置 此 对 话 框 的 图 标 。 当 应 用 程 序 主 窗 口 不 是 对 话 框 时 , 框 架 将 自 动
// 执 行 此 操 作
SetIcon(m_hIcon, TRUE); // 设 置 大 图 标
SetIcon(m_hIcon, FALSE); // 设 置 小 图 标
// TODO: 表 格 控 件 初 始 化
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
pList->ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);
pList->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
pList->InsertColumn(0, _T("窗 口 类 名 "), LVCFMT_LEFT, 100);
pList->InsertColumn(1, _T("窗 口 标 题 "), LVCFMT_LEFT, 100);
// TODO: 彩 色 按 钮
//CMFCButton中 的 SetFaceColor( ) 可 能 会 显 示 不 出 颜 色 , 需 要 设 置
m_SendBtn.m_bTransparent = FALSE;
m_SendBtn.m_bDontUseWinXPTheme = TRUE;
//在 button里 面 点 击 会 有 黑 圈 , 要 消 除 黑 色 圆 圈 需 要 使 button里 面 的 属 性
m_SendBtn.m_bDrawFocus = FALSE;
m_SendBtn.SetTextColor(RGB(248, 147, 29));
m_SendBtn.SetFaceColor(RGB(131, 175, 155));
//自 定 义 字 体 CFont *myFont;
myFont = new CFont;//申 请 内 存
myFont->CreatePointFont(180, L"黑 体 ");
m_SendBtn.SetFont(myFont);
myFont->Detach(); //释 放 申 请 的 内 存
delete myFont;
return TRUE; // 除 非 将 焦 点 设 置 到 控 件 , 否 则 返 回 TRUE
}
void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
}
else
{
}
}
CAboutDlg dlgAbout;
dlgAbout.DoModal();
CDialogEx::OnSysCommand(nID, lParam);
// 如 果 向 对 话 框 添 加 最 小 化 按 钮 , 则 需 要 下 面 的 代 码
// 来 绘 制 该 图 标 。 对 于 使 用 文 档 /视 图 模 型 的 MFC 应 用 程 序 ,
// 这 将 由 框 架 自 动 完 成 。
void CMFCApplication1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用 于 绘 制 的 设 备 上 下 文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()),
0);
// 使 图 标 在 工 作 区 矩 形 中 居 中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
}
else
{
}
}
// 绘 制 图 标
dc.DrawIcon(x, y, m_hIcon);
CDialogEx::OnPaint();
//当 用 户 拖 动 最 小 化 窗 口 时 系 统 调 用 此 函 数 取 得 光 标
//显 示 。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}
void CMFCApplication1Dlg::OnBnClickedOk()
{
// TODO: 发 送 消 息
//HWND hWnd = ::FindWindow(NULL, L"dengpeiyou - 记 事 本 “);
HWND hWnd = ::FindWindow(L"Notepad”, NULL);
if (hWnd)
{
HWND hEdit = ::FindWindowEx(hWnd, NULL, L"Edit", NULL); //查 找 客 户 的 编 辑 区
if (hEdit)
{
//::PostMessage(hEdit, WM_CHAR, 0x41, 0);//发 送 ‘ A’ 到 notepad
CString s = L"中 国 123";
for (int i = 0; i < s.GetLength(); i++)
::SendMessage(hEdit, WM_CHAR, WPARAM(s[i]), 0);
}
}
}
HBRUSH CMFCApplication1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在 此 更 改 DC 的 任 何 特 性
if (pWnd->GetDlgCtrlID() == IDC_STATIC)
{
pDC->SetTextColor(RGB(255, 0, 0));
}
if (pWnd->GetDlgCtrlID() == IDC_MFCBUTTON1)
{
pDC->SetTextColor(RGB(255, 0, 0));
}
// TODO: 如 果 默 认 的 不 是 所 需 画 笔 , 则 返 回 另 一 个 画 笔
return hbr;
}
void CMFCApplication1Dlg::OnBnClickedMfcbutton1()
{
// TODO: 发 送 消 息
HWND hWnd = ::FindWindow(NULL, L"dengpeiyou - 记 事 本 “);
//HWND hWnd = ::FindWindow(L"Notepad”, NULL);
if (hWnd)
{
CString strTitle(L"篡 改 了 标 题 "); CString getTitle;
//LPCTSTR类 型 : P表 示 指 针 ,C表 示 常 量 ,T表 示 _T宏 ,STR表 示 字 符 串
//修 改 窗 体 控 件 标 题 的 两 种 方 法
//::SetWindowText(hWnd, strTitle);
//::SendMessage(hWnd, WM_SETTEXT,0,(LPARAM)(LPCTSTR)strTitle);
//获 取 指 定 窗 口 所 在 的 矩 形 区 域 RECT rect;
::GetWindowRect(hWnd, &rect);
//int x1, y1, x2, y2;
//x1 = rect.left;
//y1 = rect.top;
//x2 = rect.right;
//y2 = rect.bottom;
//获 取 指 定 窗 口 的 客 户 区 域 RECT rect2;
::GetClientRect(hWnd, &rect2); ClientToScreen(&rect2); //转 换 为 全 屏 坐 标 rect2 = rect2;
::GetWindowText(hWnd, (LPWSTR)(LPCWSTR)getTitle, 256); //获 取 窗 口 标 题 OutputDebugString(getTitle); //在 调 试 的 输 出 窗 口 是 显 示 获 取 结 果
HWND hEdit = ::FindWindowEx(hWnd, NULL, L"Edit", NULL); //查 找 客 户 的 编 辑 区
if (hEdit)
{
}
}
else
//::PostMessage(hEdit, WM_CHAR, 0x41, 0);//发 送 ‘ A’ 到 notepad CString s = L"haha,这 是 一 个 测 试 字 符 串 666…"; //发 中 文 字 符 串 for (int i = 0; i < s.GetLength(); i++)
::SendMessage(hEdit, WM_CHAR, WPARAM(s[i]), 0);
MessageBox(L"未 找 到 指 定 的 窗 口 "dengpeiyou - 记 事 本 “”,L"提 示 ",MB_OK);
}
void CMFCApplication1Dlg::test1()
{
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
pList->DeleteAllItems();
pList->SetRedraw(FALSE);
//获 得 桌 面 窗 口
CWnd* pDesktopWnd = CWnd::GetDesktopWindow();
//获 得 第 一 个 子 窗 口
CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);
while (pWnd != NULL)
{
int nItem = pList->GetItemCount();
//获 得 窗 口 类 名
CString strClassName = _T("");
::GetClassName(pWnd->GetSafeHwnd(), strClassName.GetBuffer(256), 256);
strClassName.ReleaseBuffer();
pList->InsertItem(nItem, strClassName);
//获 得 窗 口 标 题
CString strWindowText = _T("");
::GetWindowText(pWnd->GetSafeHwnd(), strWindowText.GetBuffer(256), 256);
strWindowText.ReleaseBuffer();
pList->SetItemText(nItem, 1, strWindowText);
//继 续 下 一 个 子 窗 口
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
pList->SetRedraw(TRUE);
}
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
if (hwnd == NULL)
{
return FALSE;
}
CListCtrl* pList = (CListCtrl*)lParam;
int nItem = pList->GetItemCount();
//获 得 窗 口 类 名
CString strClassName = _T("");
::GetClassName(hwnd, strClassName.GetBuffer(256), 256);
strClassName.ReleaseBuffer();
pList->InsertItem(nItem, strClassName);
//获 得 窗 口 标 题
CString strWindowText = _T("");
::GetWindowText(hwnd, strWindowText.GetBuffer(256), 256);
strWindowText.ReleaseBuffer();
pList->SetItemText(nItem, 1, strWindowText);
return TRUE;
}
void CMFCApplication1Dlg::test2()
{
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
pList->DeleteAllItems();
pList->SetRedraw(FALSE);
//枚 举 窗 口
::EnumWindows(EnumWndProc, (LPARAM)pList);
pList->SetRedraw(TRUE);
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
test1();
}
void CMFCApplication1Dlg::OnBnClickedButton2()
{
test2();
}
VS2017中MFC的C++设计中给其它窗口发中文消息相关推荐
- 计算机在网站设计中的应用,网页设计中平面设计的应用及其作用
摘要:目前中国经济不断发展, 计算机如今也发展成为了人们生活水平所离不开的一项应用.在这种情况下平面设计出现在了人们的视野中.网页设计在现代生活水平的影响下产生.它既是现代生活中平面设计的延伸和发展, ...
- 怎么在html中设置按键,网页设计中如何设计按钮
网页设计中如何设计按钮 在网页设计中,按钮设计是常被忽略却又相当重要的一个角色.在网页设计中,按钮与链接的功能类似,都是经过点击后到达另一页面或实现某种目的,不过二者还是有实际上的区别的. 按钮代表着 ...
- dubbo go中的TPS Limit设计与实现 滑动窗口、固定窗口有什么区别?
前言 Apache Dubbo是由阿里开源的一个RPC框架,除了基本的RPC功能以外,还提供了一整套的服务治理相关功能.目前它已经是Apache基金会下的顶级项目. 而dubbogo则是dubbo的g ...
- mysql中bcnf_请问数据库设计中BCNF范式是什么意思?
展开全部 BCNF范式在3NF基础上消除对主码子集的62616964757a686964616fe78988e69d8331333431373230依赖. 以仓库管理关系表为例:仓库号,存储物品号,管 ...
- 敏捷思维- 架构设计中的方法学
敏捷思维-架构设计中的方法学 目录 1.从方法论看架构设计... 2 2.架构设计的敏捷视图... 7 3.源自需求... 13 4.团队设计... 18 5.简单设计... 24 6.迭代设计... ...
- 敏捷思维-架构设计中的方法学
敏捷思维-架构设计中的方法学 1. 从方法论看架构设计 1. 架构设计的敏捷视图 2. 源自需求 3. 团队设计 4. 简单设计 5. 迭代设计 6. 组合使 ...
- 安全态势感知产品对比_设计中的对比和人的感知
安全态势感知产品对比 In this article, we're going to explore the concept of contrast and its fundamental role ...
- 格式塔理论主要是用计算机,格式塔理论在UI设计中的运用
你曾经仰望过天空时,有注意过不同形状的云酷似熟悉的动物或物体么?有没有想过,为什么会把蓬松的一团雾气与不同形状联想在一起的?其实这就是大脑的原因. 大脑总是试图通过与以前的经历或视觉感受进行比较,然后 ...
- vs2017开发ActiveX(主讲OCX)(十一)、类向导中MFC ActiveX添加方法、添加函数、添加变量、添加事件、添加属性、添加方法的区别
本文我们就来说说类向导中MFC ActiveX添加方法.添加函数.添加变量.添加事件.添加属性.添加方法的区别.这个问题曾经困扰过我. 此处是向CCreateOcxDemoApp类中添加成员变量,及成 ...
最新文章
- WGCNA加权基因共表达网络分析(1)简介、原理
- 循序渐进学Oracle之索引、权限、角色
- 作为事件属性设置而输入的表达式“打开”产生如下错误:在Microsoft Office Access 与 OLE服务器或ActiveX控件通讯时出现问题。
- java 二分搜索获得大于目标数的第一位_遇到「最值问题」还在无脑动态规划?二分法考虑一下呗
- 开发日记-20190914 关键词 汇编语言王爽版 第六章
- 一些实用的DBA语句之二(慢慢更新)
- 四、CI框架之通过URL路径访问C中的函数
- 增强现实和3D渲染技术是如何应用在SAP产品里的
- 【TensorFlow-windows】学习笔记七——生成对抗网络
- 谷歌、阿里巴巴他们都来了,你呢?
- 《Spark 官方文档》Spark配置(一)
- .net source code download
- es 创建索引_从一道面试题来看ES的分布式架构原理
- 解码器输出PSNR为0表示什么
- 物联网解决方案应用之智能安防运维解决方案
- android 知识点大全 面试
- 推荐一款点阵字库生成工具/点阵生成器
- android studio 中要在app名称中添加特殊符号
- Windows Git 上传 报错 error: bad signature 0x00000000 fatal: index file corrupt
- 以太坊基础---奖励
热门文章
- 微信小程序 开发 “婚礼邀请函” 微信小程序入门可看
- Paper翻译:《A Novel Convolutional Neural Network Based Model for Recognition and Classification of App》
- 计算机如何磁盘整理,如何整理磁盘碎片让Win7电脑运行更快?
- Criteo数据集预处理
- android游戏开发教程之基本概念
- 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
- Google 机器学习术语表
- 幻立方解法之素数3阶幻立方
- 不允许指针指向不完整的类类型
- 每天只需要花10分钟,在西瓜头条,不用拍摄靠声音挣300