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++设计中给其它窗口发中文消息相关推荐

  1. 计算机在网站设计中的应用,网页设计中平面设计的应用及其作用

    摘要:目前中国经济不断发展, 计算机如今也发展成为了人们生活水平所离不开的一项应用.在这种情况下平面设计出现在了人们的视野中.网页设计在现代生活水平的影响下产生.它既是现代生活中平面设计的延伸和发展, ...

  2. 怎么在html中设置按键,网页设计中如何设计按钮

    网页设计中如何设计按钮 在网页设计中,按钮设计是常被忽略却又相当重要的一个角色.在网页设计中,按钮与链接的功能类似,都是经过点击后到达另一页面或实现某种目的,不过二者还是有实际上的区别的. 按钮代表着 ...

  3. dubbo go中的TPS Limit设计与实现 滑动窗口、固定窗口有什么区别?

    前言 Apache Dubbo是由阿里开源的一个RPC框架,除了基本的RPC功能以外,还提供了一整套的服务治理相关功能.目前它已经是Apache基金会下的顶级项目. 而dubbogo则是dubbo的g ...

  4. mysql中bcnf_请问数据库设计中BCNF范式是什么意思?

    展开全部 BCNF范式在3NF基础上消除对主码子集的62616964757a686964616fe78988e69d8331333431373230依赖. 以仓库管理关系表为例:仓库号,存储物品号,管 ...

  5. 敏捷思维- 架构设计中的方法学

    敏捷思维-架构设计中的方法学 目录 1.从方法论看架构设计... 2 2.架构设计的敏捷视图... 7 3.源自需求... 13 4.团队设计... 18 5.简单设计... 24 6.迭代设计... ...

  6. 敏捷思维-架构设计中的方法学

    敏捷思维-架构设计中的方法学 1.    从方法论看架构设计 1.    架构设计的敏捷视图 2.    源自需求 3.    团队设计 4.    简单设计 5.    迭代设计 6.    组合使 ...

  7. 安全态势感知产品对比_设计中的对比和人的感知

    安全态势感知产品对比 In this article, we're going to explore the concept of contrast and its fundamental role ...

  8. 格式塔理论主要是用计算机,格式塔理论在UI设计中的运用

    你曾经仰望过天空时,有注意过不同形状的云酷似熟悉的动物或物体么?有没有想过,为什么会把蓬松的一团雾气与不同形状联想在一起的?其实这就是大脑的原因. 大脑总是试图通过与以前的经历或视觉感受进行比较,然后 ...

  9. vs2017开发ActiveX(主讲OCX)(十一)、类向导中MFC ActiveX添加方法、添加函数、添加变量、添加事件、添加属性、添加方法的区别

    本文我们就来说说类向导中MFC ActiveX添加方法.添加函数.添加变量.添加事件.添加属性.添加方法的区别.这个问题曾经困扰过我. 此处是向CCreateOcxDemoApp类中添加成员变量,及成 ...

最新文章

  1. WGCNA加权基因共表达网络分析(1)简介、原理
  2. 循序渐进学Oracle之索引、权限、角色
  3. 作为事件属性设置而输入的表达式“打开”产生如下错误:在Microsoft Office Access 与 OLE服务器或ActiveX控件通讯时出现问题。
  4. java 二分搜索获得大于目标数的第一位_遇到「最值问题」还在无脑动态规划?二分法考虑一下呗
  5. 开发日记-20190914 关键词 汇编语言王爽版 第六章
  6. 一些实用的DBA语句之二(慢慢更新)
  7. 四、CI框架之通过URL路径访问C中的函数
  8. 增强现实和3D渲染技术是如何应用在SAP产品里的
  9. 【TensorFlow-windows】学习笔记七——生成对抗网络
  10. 谷歌、阿里巴巴他们都来了,你呢?
  11. 《Spark 官方文档》Spark配置(一)
  12. .net source code download
  13. es 创建索引_从一道面试题来看ES的分布式架构原理
  14. 解码器输出PSNR为0表示什么
  15. 物联网解决方案应用之智能安防运维解决方案
  16. android 知识点大全 面试
  17. 推荐一款点阵字库生成工具/点阵生成器
  18. android studio 中要在app名称中添加特殊符号
  19. Windows Git 上传 报错 error: bad signature 0x00000000 fatal: index file corrupt
  20. 以太坊基础---奖励

热门文章

  1. 微信小程序 开发 “婚礼邀请函” 微信小程序入门可看
  2. Paper翻译:《A Novel Convolutional Neural Network Based Model for Recognition and Classification of App》
  3. 计算机如何磁盘整理,如何整理磁盘碎片让Win7电脑运行更快?
  4. Criteo数据集预处理
  5. android游戏开发教程之基本概念
  6. 女朋友生日java程序_★★女朋友要过生日了!我想用java为她写一个程序,一举两得啊! 希望大家多提建议啊!谢谢!!!...
  7. Google 机器学习术语表
  8. 幻立方解法之素数3阶幻立方
  9. 不允许指针指向不完整的类类型
  10. 每天只需要花10分钟,在西瓜头条,不用拍摄靠声音挣300