对话框

创建MFC应用程序时,选择对话框

可使用向导创建对应的对话框的类

  1 // MFC_Demo2Dlg.cpp : 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MFC_Demo2.h"
6 #include "MFC_Demo2Dlg.h"
7 #include "afxdialogex.h"
8 #include "DlgExec.h"
9 #include "DlgShow.h"
10
11 #ifdef _DEBUG
12 #define new DEBUG_NEW
13 #endif
14
15
16 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
17
18 class CAboutDlg : public CDialogEx
19 {
20 public:
21 CAboutDlg();
22
23 // 对话框数据
24 #ifdef AFX_DESIGN_TIME
25 enum { IDD = IDD_ABOUTBOX };
26 #endif
27
28 protected:
29 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
30
31 // 实现
32 protected:
33 DECLARE_MESSAGE_MAP()
34 };
35
36 CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
37 {
38 }
39
40 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
41 {
42 CDialogEx::DoDataExchange(pDX);
43 }
44
45 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
46 END_MESSAGE_MAP()
47
48
49 // CMFC_Demo2Dlg 对话框
50
51
52
53 CMFC_Demo2Dlg::CMFC_Demo2Dlg(CWnd* pParent /*=NULL*/)
54 : CDialogEx(IDD_MFC_DEMO2_DIALOG, pParent)
55 {
56 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
57 }
58
59 void CMFC_Demo2Dlg::DoDataExchange(CDataExchange* pDX)
60 {
61 CDialogEx::DoDataExchange(pDX);
62 }
63
64 BEGIN_MESSAGE_MAP(CMFC_Demo2Dlg, CDialogEx)
65 ON_WM_SYSCOMMAND()
66 ON_WM_PAINT()
67 ON_WM_QUERYDRAGICON()
68 ON_BN_CLICKED(IDC_BUTTON1, &CMFC_Demo2Dlg::OnBnClickedButton1)
69 ON_BN_CLICKED(IDC_BUTTON2, &CMFC_Demo2Dlg::OnBnClickedButton2)
70 END_MESSAGE_MAP()
71
72
73 // CMFC_Demo2Dlg 消息处理程序
74
75 BOOL CMFC_Demo2Dlg::OnInitDialog()
76 {
77 CDialogEx::OnInitDialog();
78
79 // 将“关于...”菜单项添加到系统菜单中。
80
81 // IDM_ABOUTBOX 必须在系统命令范围内。
82 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
83 ASSERT(IDM_ABOUTBOX < 0xF000);
84
85 CMenu* pSysMenu = GetSystemMenu(FALSE);
86 if (pSysMenu != NULL)
87 {
88 BOOL bNameValid;
89 CString strAboutMenu;
90 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
91 ASSERT(bNameValid);
92 if (!strAboutMenu.IsEmpty())
93 {
94 pSysMenu->AppendMenu(MF_SEPARATOR);
95 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
96 }
97 }
98
99 // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
100 // 执行此操作
101 SetIcon(m_hIcon, TRUE); // 设置大图标
102 SetIcon(m_hIcon, FALSE); // 设置小图标
103
104 // TODO: 在此添加额外的初始化代码
105 dlg.Create(IDD_SHOW);
106 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
107 }
108
109 void CMFC_Demo2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
110 {
111 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
112 {
113 CAboutDlg dlgAbout;
114 dlgAbout.DoModal();
115 }
116 else
117 {
118 CDialogEx::OnSysCommand(nID, lParam);
119 }
120 }
121
122 // 如果向对话框添加最小化按钮,则需要下面的代码
123 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
124 // 这将由框架自动完成。
125
126 void CMFC_Demo2Dlg::OnPaint()
127 {
128 if (IsIconic())
129 {
130 CPaintDC dc(this); // 用于绘制的设备上下文
131
132 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
133
134 // 使图标在工作区矩形中居中
135 int cxIcon = GetSystemMetrics(SM_CXICON);
136 int cyIcon = GetSystemMetrics(SM_CYICON);
137 CRect rect;
138 GetClientRect(&rect);
139 int x = (rect.Width() - cxIcon + 1) / 2;
140 int y = (rect.Height() - cyIcon + 1) / 2;
141
142 // 绘制图标
143 dc.DrawIcon(x, y, m_hIcon);
144 }
145 else
146 {
147 CDialogEx::OnPaint();
148 }
149 }
150
151 //当用户拖动最小化窗口时系统调用此函数取得光标
152 //显示。
153 HCURSOR CMFC_Demo2Dlg::OnQueryDragIcon()
154 {
155 return static_cast<HCURSOR>(m_hIcon);
156 }
157
158 /*
159 模态与非模态 模态就是只能操作当前对话框,非模态反之
160 */
161
162 //模态对话框的点击事件
163 void CMFC_Demo2Dlg::OnBnClickedButton1()
164 {
165 // TODO: 在此添加控件通知处理程序代码
166
167 //弹出对话框 阻塞
168 CDlgExec dlg;
169 dlg.DoModal();
170 }
171
172 //非模态对话框的点击事件
173 void CMFC_Demo2Dlg::OnBnClickedButton2()
174 {
175 // TODO: 在此添加控件通知处理程序代码
176
177 //弹出非模态对话框
178 //CDlgShow dlg;
179
180 //1.创建
181 //dlg.Create(IDD_SHOW); //创建窗口只能创建一次,多次就会崩掉 建议创建放在初始化函数中
182 //2.显示
183 dlg.ShowWindow(SW_SHOWNORMAL);
184 }

按钮消息,可通过设计界面双击,自动会产生单击消息,也可在属性中添加

在使用其他控件时,需要给其它控件绑定相应的变量,控件变量的类别为Control

static_text 添加变量时,会出现  以static为结尾的ID是不可以添加变量,需要修改ID

 1 //用static_text显示图片,需要使用到bitmap图片
2 //① 设置静态控件窗口风格为位图居中显示
3 m_pic.ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE);
4 //② 通过路径获取bitmap句柄
5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
6 //宽高设置 应该按照 控件的大小去设置
7 CRect rect;
8 m_pic.GetWindowRect(rect);
9
10 //③ 静态控件设置bitmap
11 m_pic.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width, rect.Height));

EnableWindow()可设置按钮的点击状态

C++ MFC学习 (四)的更多相关文章

  1. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

  2. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  3. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  4. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  5. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  7. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  8. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  9. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  10. Expression Blend学习四控件

    原文:Expression Blend学习四控件 Expression Blend制作自定义按钮 1.从Blend工具箱中添加一个Button,按住shift,将尺寸调整为125*125; 2.右键点 ...

随机推荐

  1. vue3+TS 自定义指令:长按触发绑定的函数

    vue3+TS 自定义指令:长按触发绑定的函数 而然间看到一个在vue2中写的长按触发事件的自定义指定,想着能不能把他copy到我的vue3项目中呢. 编写自定义指令时遇到的几个难点 1.自定义指令的 ...

  2. [机器学习] Yellowbrick使用笔记8-模型选择可视化

    Yellowbrick可视化工具旨在指导模型选择过程.一般来说,模型选择是一个搜索问题,定义如下:给定N个由数值属性描述的实例和(可选)一个估计目标,找到一个由特征.算法和最适合数据的超参数组成的三元 ...

  3. 真正“搞”懂HTTP协议07之body的玩法(实践篇)

    我真没想到这篇文章竟然写了将近一个月,一方面我在写这篇文章的时候阳了,所以将近有两周没干活,另外一方面,我发现在写基于Node的HTTP的demo的时候,我不会Node,所以我又要一边学学Node,一 ...

  4. (8)go-micro微服务Mysql配置

    目录 一 gorm介绍 二 gorm安装 1.1 下载依赖 1.2 使用MySQL驱动 三 CURD操作 1. 查询 1.1 单行查询 1.2 多行查询 2. 插入数据 3. 更新数据 4. 删除数据 ...

  5. Ubuntu 安装 samba 服务器

    下载 samba 工具 sudo apt install samba samba-common 配置 sudo vim /etc/samba/smb.conf // 复制到san.conf最下面 [u ...

  6. Redefinition of 'y1' as different kind of symbol

    Redefinition of 'y1' as different kind of symbol 原因 解释:此次定义的y1变量与函数库中定义的y1重名了,所以编译错误,重定义了y1变量. 解决方法: ...

  7. 超详细版本vue+capacitor(自定义capacitor插件)编写移动端应用

    我的环境 Node v16.13.0 npm v8.1.0 mac的话需要安装Xcode windows的话需要Java 8 JDK和Android Studio软件 本文以安卓开发为例 找一个自己喜 ...

  8. Echarts点击多组数据多个柱子中的一个柱子,获取当前点击的是第几组数据,并获取点击的是当前组别第几根柱子,以及对应横坐标,

    遇到一需求,一般都是点击图后获取其中一组数据就可以了,不需要详细到获取点击了当前X轴对应的其中的哪个, 今天的需求是 Echarts点击多组数据多个柱子中的一个柱子,获取当前点击的是第几组数据,并获取 ...

  9. 2211-13 flask模板

    第 3 章:模板 在一般的 Web 程序里,访问一个地址通常会返回一个包含各类信息的 HTML 页面.因为我们的程序是动态的,页面中的某些信息需要根据不同的情况来进行调整,比如对登录和未登录用户显示不 ...

  10. vue原理:diff、模板编译、渲染过程等

    一.虚拟DOM: 因为DOM操作非常消耗性能,在操作DOM时,会出现DOM的回流(Reflow:元素大小或者位置发生改变)与重绘(元素样式的改变)使DOM重新渲染. 现在的框架Vue和React很少直 ...