打开程序后,在一个静态控件上显示一张位图。然后mfc实现:在一个编辑框控件中输入一个字符串,点击按钮后,在位图中央显示输入的字符串。

时间: 2023-06-20 09:04:46 浏览: 78
首先,在资源编辑器中添加一个静态控件和一个编辑框控件,以及一个按钮控件。将静态控件的类型设置为“图片”,并将其ID设置为IDC_STATIC_PIC;将编辑框控件的ID设置为IDC_EDIT_INPUT;将按钮控件的ID设置为IDC_BUTTON_SHOW。 然后,在对话框类的头文件中添加以下成员变量: ```cpp CStatic m_staticPic; // 静态控件 CEdit m_editInput; // 编辑框控件 CButton m_btnShow; // 按钮控件 CBitmap m_bitmap; // 位图 ``` 在OnInitDialog()函数中,添加以下代码: ```cpp // 加载位图 m_bitmap.LoadBitmap(IDB_BITMAP); // 在静态控件中显示位图 m_staticPic.SetBitmap(m_bitmap); ``` 接下来,在按钮的单击事件函数OnBnClickedButtonShow()中添加以下代码: ```cpp // 获取输入的字符串 CString strInput; m_editInput.GetWindowText(strInput); // 获取位图宽高 BITMAP bmpInfo; m_bitmap.GetObject(sizeof(BITMAP), &bmpInfo); // 创建设备上下文 CDC* pDC = m_staticPic.GetDC(); // 计算字符串宽度 int nTextWidth = pDC->GetTextExtent(strInput).cx; // 计算字符串位置 int nX = (bmpInfo.bmWidth - nTextWidth) / 2; int nY = bmpInfo.bmHeight / 2; // 在位图中央显示字符串 pDC->SetBkMode(TRANSPARENT); pDC->TextOut(nX, nY, strInput); // 释放设备上下文 m_staticPic.ReleaseDC(pDC); ``` 最后,记得在对话框类的头文件中添加按钮的消息映射: ```cpp afx_msg void OnBnClickedButtonShow(); ``` 并在对话框类的实现文件中添加消息映射: ```cpp ON_BN_CLICKED(IDC_BUTTON_SHOW, &CMyDlg::OnBnClickedButtonShow) ``` 完整实现代码如下: ```cpp // MyDlg.h #pragma once #include "afxwin.h" class CMyDlg : public CDialogEx { public: CMyDlg(CWnd* pParent = nullptr); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_MY_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() private: CStatic m_staticPic; CEdit m_editInput; CButton m_btnShow; CBitmap m_bitmap; public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedButtonShow(); }; // MyDlg.cpp #include "stdafx.h" #include "My.h" #include "MyDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MY_DIALOG, pParent) { } void CMyDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_PIC, m_staticPic); DDX_Control(pDX, IDC_EDIT_INPUT, m_editInput); DDX_Control(pDX, IDC_BUTTON_SHOW, m_btnShow); } BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx) ON_BN_CLICKED(IDC_BUTTON_SHOW, &CMyDlg::OnBnClickedButtonShow) END_MESSAGE_MAP() BOOL CMyDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 加载位图 m_bitmap.LoadBitmap(IDB_BITMAP); // 在静态控件中显示位图 m_staticPic.SetBitmap(m_bitmap); return TRUE; } void CMyDlg::OnBnClickedButtonShow() { // 获取输入的字符串 CString strInput; m_editInput.GetWindowText(strInput); // 获取位图宽高 BITMAP bmpInfo; m_bitmap.GetObject(sizeof(BITMAP), &bmpInfo); // 创建设备上下文 CDC* pDC = m_staticPic.GetDC(); // 计算字符串宽度 int nTextWidth = pDC->GetTextExtent(strInput).cx; // 计算字符串位置 int nX = (bmpInfo.bmWidth - nTextWidth) / 2; int nY = bmpInfo.bmHeight / 2; // 在位图中央显示字符串 pDC->SetBkMode(TRANSPARENT); pDC->TextOut(nX, nY, strInput); // 释放设备上下文 m_staticPic.ReleaseDC(pDC); } ```

相关推荐

最新推荐

recommend-type

Android中使用Kotlin实现一个简单的登录界面

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。接下来本文通过实例代码给大家讲解Android中使用Kotlin实现一个简单的登录界面,一起看看吧
recommend-type

把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载

介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供...
recommend-type

电源技术中的基于ARM 的高分辨率压电陶瓷驱动电源设计方案(一)

实验结果表明:该设计方案的电源输出电压噪声低于0.43 mV、输出最大非线性误差低于0.024%、分辨率可达1.44 mV,能够满足高分辨率微位移定位系统中静态定位控制的需求。  0 引言  压电陶瓷驱动器(PZT)是微位移...
recommend-type

layui实现点击按钮给table添加一行

想实现点击按钮在表格添加一行的功能,但发现layui并未集成该工具栏,因此,需要自己手动添加这个功能;这篇文章主要介绍了layui点击按钮给table添加一行,需要的朋友可以参考下
recommend-type

js中关于一个分号的崩溃示例

代码如下: if ($(“span”, $(“#txtStere”).... } } 上面的js代码不管if条件的结果是true还是false都会执行大括号的代码,我整了一个多小时,愣是不明白怎么回事,崩溃啊崩溃,最后鬼使神差发现了原因,if条件括号
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。