复习MFC之clean-温故而知新

小字典之MFC使用ADO访问ACCESS进行增删改查 VS2015开发 找了半天没找到 也实现不老 就自己直接写一个吧  下面先是.h文件和.cpp文件 也就是源文件  然后是一些代码分析 如有不足 感谢指出 谢谢合作 //.h文件 #pragma once #include "afxcmn.h" // C_Final_Dlg 对话框 #import "c:\program files\common files\system\ado\msado15.dll" 阅读详情

一、新建工程

基于对话框

MFC标准

 

二、模态

拖按钮的控件,双击进入是他的消息代码

右键那个按钮,添加DLG类COneDlg,其他默认

然后在主对话框的头文件中添加新建对话框的头

#include “OneDlg.h”

然后在按钮的消息代码中添加

COneDlg dlg;
dlg.DoModal();

 

三、非模态

拖按钮的控件,双击进入是他的消息代码

右键那个按钮,添加DLG类CTwoDlg,其他默认

然后在主对话框的头文件中添加新建对话框的头

#include “TwoDlg.h”

然后在按钮的消息代码中添加

CTwoDlg *dlg = new CTwoDlg;
dlg->Create(IDD_DIALOG1,this); //创建非模态对话框
dlg->ShowWindow(SW_SHOW); //显示

 

三、添加图片并实现两个图片的变换

1、先拖控件Picture control

改属性

type:bitmap

ID :IDC_PICTURE

IMAGE: IDB_BITMAP7

NOTIFY : TRUE

2、右键主dlg的图片添加事件处理程序,单击在主dlg

3、右键主dlg的图片添加变量m_picture

4、在主dlg.h中定义变量

public:

HBITMAP m_hBitmap7;
HBITMAP m_hBitmap8;
bool m_bChangeBmpFlag;

5、在主dlg初始化函数中添加图片变量的赋值

m_hBitmap7 = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7));
m_hBitmap8 = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP8));

6、在主dlg的构造中初始化bool变量的值

m_bChangeBmpFlag = false;

7、在点击图片的消息中添加变换图片的代码

if(m_bChangeBmpFlag == false)
m_picture.SetBitmap(m_hBitmap8);
else
m_picture.SetBitmap(m_hBitmap7);

m_bChangeBmpFlag = !m_bChangeBmpFlag;

 

四、添加tablectrl标签

1、拖控件tab control

2、类视图中添加类:CMyTabCtrl

继承 : CTabCtrl

3、在主dlg的头文件中添加

#include “MyTableCtrl.h”

然后后面

public:

CMyTableCtrl m_tab;

4、在源文件DoDataExchange()函数中绑定,添加代码:

DDX_Control(pDX, IDC_TAB1, m_tab);

5、在OnInitDialog()函数中添加

m_tab.InsertItem(0,L”清扫目录”);
m_tab.InsertItem(1,L”显示目录”);
m_tab.InsertItem(2,L”设置目录”);
m_tab.InsertItem(3,L”扫描删除”);
CSize size(0,30);
m_tab.SetItemSize(size);         //设置高度和宽度

6、将其写进函数里面(在MyTableCtrl的头文件和源文件)

头文件声明函数:

public:
void InitTableCtrl();

源文件实现函数

void CMyTableCtrl::InitTableCtrl()
{
this->InsertItem(0,L”清扫目录”);
this->InsertItem(1,L”显示目录”);
this->InsertItem(2,L”设置目录”);
this->InsertItem(3,L”扫描删除”);
CSize size(0,30);
this->SetItemSize(size);
}

在OnInitDialog()函数里面调用函数(主dlg的函数)

m_tab.InitTableCtrl();

 

五、添加标签下显示的DLG

1、添加dlg的资源

2、给对话框添加一个类:CShowDlg

3、定义类的对象

在tablectrl的头文件添加:

#include “ShowDlg.h”

定义对象:

public:
CShowDlg m_dlgShow;

4、修改dlg的属性

ID : IDD_SHOW_DLG

BORDER : NONE                     //去掉边框

STYLE : CHILD                        //出现在主DLG里面

5、初始化  (直接贴上会覆盖标签栏,需要向下移动30单位的大小)(非模态出现dlg)

m_dlgShow.Create(IDD_SHOW_DLG,this);
CRect rect;
//获取 标签 矩形框
this->GetClientRect(rect);
rect.top+=30;
rect.bottom+=30;
//把 m_dlgShow 窗口相对于 标签 向下移动30
m_dlgShow.MoveWindow(rect);

m_dlgShow.ShowWindow(SW_SHOW);

 

六,添加第一个按钮的功能(显示一个浏览文件夹的对话框)

在按钮事件下面添加下列代码:

wchar_t szFolderName[MAX_PATH] = {0}; //存储文件夹的名字
wchar_t szFolderPath[MAX_PATH] = {0}; //存储文件夹的路径
BROWSEINFO info;
info.hwndOwner = this->m_hWnd; //哪个窗口拥有这个对话框
info.pidlRoot = NULL; //NULL是从桌面文件夹开始浏览
info.pszDisplayName = szFolderName; //接收文件夹的名字
info.lpszTitle = L”选择一个吧!O(∩_∩)O”; //标题
info.ulFlags = NULL; //添加额外的控件
info.lpfn = NULL;
info.lParam = NULL;
info.iImage = NULL;

PCIDLIST_ABSOLUTE pa = ::SHBrowseForFolder(&info); //显示一个浏览文件夹的对话框

::SHGetPathFromIDList(pa,szFolderPath);

将其封装成一个函数

在app(头文件)上添加函数声明:

public:
static CString GetBrowseFolderSelectPath(CWnd* pWnd); //获取 浏览对话框的选择的路径

在实现里面写:

CString CMy26App::GetBrowseFolderSelectPath(CWnd* pWnd)
{
wchar_t szFolderName[MAX_PATH] = {0}; //存储文件夹的名字
wchar_t szFolderPath[MAX_PATH] = {0}; //存储文件夹的路径
BROWSEINFO info;
info.hwndOwner = pWnd->m_hWnd; //哪个窗口拥有这个对话框
info.pidlRoot = NULL; //NULL是从桌面文件夹开始浏览
info.pszDisplayName = szFolderName; //接收文件夹的名字
info.lpszTitle = L”选择一个吧!O(∩_∩)O”; //标题
info.ulFlags = NULL; //添加额外的控件
info.lpfn = NULL;
info.lParam = NULL;
info.iImage = NULL;

PCIDLIST_ABSOLUTE pa = ::SHBrowseForFolder(&info); //显示一个浏览文件夹的对话框

if(::SHGetPathFromIDList(pa,szFolderPath) == TRUE)
{
int a = 100;
if(wcscmp(szFolderPath,L” “) != 0) //获取成功了
{
return szFolderPath;
}
}
return L””;

}

在按钮事件下面调用:

void CShowDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString strPath = CMy26App::GetBrowseFolderSelectPath(this);
if(strPath != L””)
{
//在列表上插入
}
}

 

七、在主视图上显示添加的文件夹

1、在类视图上添加类 CShowPathListCtrl

基类CListCtrl

完成

2、在副DLG头文件添加

#include “ShowPathListCtrl.h”

 

public:
CShowPathListCtrl m_listctrlShowPath;

3、在源文件中绑定(DoDataExchange函数)

DDX_Control(pDX,IDC_LIST1,m_listctrlShowPath);

//IDC_LIST1是副窗口上主显示窗口的ID

4、修改副窗口上主显示窗口的属性,将图标ICON显示改为LIST列表显示

5、第一个按钮点击的消息改为

void CShowDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString strPath = CMy26App::GetBrowseFolderSelectPath(this);
if(strPath != L””)
{
//在列表上插入
m_listctrlShowPath.InsertItem(m_listctrlShowPath.GetItemCount(),strPath);
}
}

6、添加复选框

类视图showdlg右键属性->重写->OnInitDialog->添加

将实现改为

BOOL CShowDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

m_listctrlShowPath.SetExtendedStyle(LVS_EX_CHECKBOXES); //添加复选按钮
return TRUE; // return TRUE unless you set the focus to a control

}

 

八、实现第二个按钮和第三个按钮的功能

void CShowDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
for(int i = 0; i<m_listctrlShowPath.GetItemCount();i++)
{
//判断i 这一项是否选中
if(m_listctrlShowPath.GetCheck(i) == TRUE)
//删除这一项
m_listctrlShowPath.DeleteItem(i);
}
}

 

void CShowDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码

//删除所有项
m_listctrlShowPath.DeleteAllItems();

}

 

九、添加右键事件处理

1、ShowPathListCtrl类右键属性 添加鼠标右击事件(=NM_RCLICK)

删掉TN和下面那行

2、资源视图添加menu

第一行随便填

下面写要添加的东西

3、在头文件添加右键列表菜单

CMenu menu; //泪飙的右键菜单

4、在构造里面

menu.LoadMenu(IDR_MENU1); //加载菜单

在右击事件函数中写入

//获取光标的坐标
POINT point;
::GetCursorPos(&point);
//弹出菜单
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this);

5、在资源视图的MENU的对象中的每一个下拉栏目中添加事件处理程序

之前这些功能都写过,直接复制粘贴就成

将“m_listctrlShowPath.”改为“this->”

退出的函数中写

AfxGetMainWnd()->PostMessage(WM_CLOSE);

WTL: 从零建立自己的CMyTabCtrl(一) 对CTabView控件,有了相当了解之后,我做了一些改进。我看到的结果 阅读详情

相关推荐

MFC中窗口的销毁过程

MFC的窗口对象包含两个部分:封装的窗口对象和C++对象,其删除顺序:先窗口对象(WM_DESTROY(OnDestory()))然后C++对象(WM_NCDESTROY(OnNcDestroy())) 源码分析如下: 删除窗口对象 void CWnd::OnDestroy() { ............. // Active Accessibility if (m_pProxy !=

u013089125的专栏 2371

温故而知新

温故而知新!

一粒沙_520的专栏 835

DDX_Control

DDX_Control void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl ); 参数: pDX是 指向CDataExchange对象的指针。这种结构为指定对象提供了建立数据交换的环境,也包括结构的指向。 nIDC 子控件类的资源ID继承控件的属性。 rControl 对对话框成员变量的一

别逗了好么 4544

mfc之DDX_Control作用

把控件变量(m_Treemain)和相关控件(IDC_MAINTREE)关联起来。DDX_Control将控件与变量绑定,这样就可以通过变量来控制控件等,添加的DDX_Control都会放到DoDataExchange中.

ancy的博客 2486

C++MFC对话框小项目:Clean 垃圾清理插件

C++实践小项目:Clean 垃圾清理插件

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

C/C++工程师综合练习卷:从字符串逆序到快速幂的高频考点与工程实践

字符串处理与算法优化是C/C++开发中的基础能力,也是笔试面试中淘汰率最高的环节。理解字符串逆序的指针操作、数组初始化的内存布局,再到排序算法的稳定性与快速幂的二进制拆解,构成了从语言基础到复杂度的核心知识链。现代C++特性如constexpr、回调函数与并发中的ABA问题,进一步将语法能力与工程场景衔接。在VSCode环境配置、文件读写、C盘清理等工具链实践中,开发者需将知识落于可运行的项目。本文基于一份按能力模块组织的综合练习卷,以自测方式梳理这些高频考点,帮助读者定位短板、强化边界意识,在真实工程中减

weixin_33416697的博客 272

基于LendingClub数据的信贷分析和建模报告

一:课题分析 二:数据获取 三:数据探索 3.1主要特征含义理解 3.2特征分布 3.2.1目标特征分布 3.2.2分类变量的分布 3.2.3连续数值特征分布 3.2.4时序特征分布 3.2.5文字特征分布 3.2.6两两特征的协方差 四:数据预处理 4.1数据集划分 4.2特征缺失值识别与处理 4.2.1严重缺失值的处理 4.2.2缺失值填充 4.3同值性特...

棒子皮蹦蹦床 2万+

一步一步开发sniffer(Winpcap+MFC)(三)安得广厦千万间,先画蓝图再砌砖——搭建winpcap抓包框架

采用天朝流行的话,“由于种种原因”本人已接近一年半没有写博客了,最近回想起来,很多东西即便再小也得慢慢积累,更何况前两章之后就没有了,很多网友表示比较期待后面的文字,不能做一个太监了事,打算还是继续写完,给被吊了胃口这么久的朋友表示深深地歉意。 这一章要讲的是winpcap核心编程,首先来看一下sniffer程序的整体框架,程序主要由三个部分构成,其示意图如下: 其中,winpcap对

litingli的专栏 2万+

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 419

基于Python的CT骨料图像分割与STL批量导出完整指南

本文介绍了一套完整的Python解决方案,用于CT骨料图像的分割与STL导出。针对CT图像中颗粒粘连、噪声伪影等技术难点,提出基于分水岭算法的分割策略,结合距离变换与标记控制实现颗粒分离。内容包括环境配置、数据读取与预处理、Otsu阈值分割、分水岭算法实现、表面提取与STL导出等关键步骤。教程提供详细代码及解释,帮助读者从CT体数据出发,最终生成每个颗粒的三维网格文件,便于后续定量分析和数值模拟。

huanghm88的专栏 235

【第30节】MFC编程:ListCtrl控件和TreeCtrl控件

CImageList` 是 MFC(Microsoft Foundation Classes)中的一个类,用于管理相同大小的图像集合,通常用于为其他控件(如列表控件、树控件、标签控件等)提供图标资源。- `nFlags`:指定图像列表的类型,如 `ILC_COLOR4`(16色)、`ILC_COLOR8`(256色)、`ILC_COLOR32`(真彩色)等。这个项目主要用于演示 MFC 中常用控件的使用方法和基本功能,包括列表控件、树形控件、Shell控件等。

攻城狮7号的博客 1632

人工智能智能体研究综述:从理论架构到前沿应用

AI Agent,即人工智能智能体,是指能够在特定环境中自主感知、推理、决策并执行行动以实现特定目标的智能系统[1]。自主性反应性主动性(Pro-activeness)和社会性fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;AI Agent核心特征自主性 Autonomy反应性 Reactivity主动性 Pro-activeness。

nmdbbzcl的博客 902

自定义MFC清屏函数

定义一个MFC清屏函数clear() void clear() { CDC *pDC = GetDC(); CRect rc; GetClientRect(&rc); pDC->FillSolidRect(&rc, RGB(255, 255, 255)); ReleaseDC(pDC); }

dlz_yhn的博客 1230

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 313

【DRAM存储器四十三】LPDDR5介绍--寻址

简要说明LPDDR5 X16、x8 die的寻址

highman110的博客 966

mfc 窗口类与窗口资源文件绑定

在构造函数中 绑定窗口资源 id DepartmentSetDlg::DepartmentSetDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DEPT_DLG, pParent) { m_hIcon = AfxGetApp()->LoadStandardIcon(IDI_APPLICATION); } 窗口内的控件绑定 如 窗口资源中 放了个 ctreecontrol 窗口类中 定义了个私有变量,如何绑定 ...

全粘工程师 1289

CollisionLoss 设计与实现原理说明

文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制

@bangbang的博客 94

MFC中的标准输出重定向

 void RedirectIOToConsole() {  int hConHandle;  HANDLE lStdHandle;  CONSOLE_SCREEN_BUFFER_INFO coninfo;  FILE *fp;  // allocate a console for this app  AllocConsole(); 

cleanfield的专栏 2786

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入浅出MFC:DDX_Control本质探究

注:以下以名为Test的对话框工程为例讲解对话框程序中,如果我们有拖标准控件到界面中,并且有和控件类变量绑定,则会有void CTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_TEST, m_testBtn); DDX_Co

Hisin Wang的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

DDX_Control(pDX, IDC_judge, m_imageevaluation);

DDX_Control函数管理着在对话框、表格视或控件视中被子类化的控件与对话框、表格视或控件视的CWnd数据成员之间的数据交换。有关DDX的更多信息参见《Visual C++程序员指南》中的“对话框数据交换和校验”和《Visual C++教程》中的“加入对话框”。用例:void Cdialog2Dlg::DoDataExchange(CDataExchange* pDX)  {  CDialog...

hk121的博客 1605

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 复习MFC之截屏-温故而知新
下一篇: netcat用法
fa1lr4in
博客等级 码龄9年 64粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值