![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC界面
小米的修行之路
是日已过,命亦随减;如少水鱼,斯有何乐?当勤精进,如救头燃!但念无常,慎勿放逸。
展开
-
MFC单文档多次分割窗口
又用到了窗口,很简单的东西,再次记录一下吧:1、protected: CSplitterWnd m_Splitter; CSplitterWnd m_SplitterLeft;2、class CLeftTopView : public CView class CLeftBottomView : public CView class CRightView : public CEditViewBOOL CMainFrame::OnC...原创 2020-12-07 10:48:48 · 408 阅读 · 0 评论 -
CEditView 输出内容自动换行
BOOL CRightView::PreCreateWindow(CREATESTRUCT& cs){ //去掉CEditView的水平滚动条,实现自动换行 BOOL bPreCreated = CEditView::PreCreateWindow(cs); cs.style &= AFX_WS_DEFAULT_VIEW | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_NOHIDESEL; cs.style |= ES_READ.原创 2020-12-01 17:54:58 · 288 阅读 · 0 评论 -
CTabCtrl控件从零开始自绘
原理:每种控件都是一个窗口,建立CWnd 的派生类,在派生类的onpaint()函数中进行绘制5个标签,然后创建5个窗口,作为标签页的显示窗口。建立点击消息映射,通过点击不同的标签来显示不同的窗口实例代码下载:点击打开链接效果:主要代码代码实现:BOOL CCTabCtrl自绘Dlg::OnInitDialog(){ CDialogEx::OnInitDialog(...原创 2017-10-12 16:49:09 · 3357 阅读 · 13 评论 -
ListBox控件自绘
原理和步骤和前面控件相差无几,这里就不讲了,只贴完整代码:主对话框类:#pragma once#include "MyListBox.h"// CListBox自绘Dlg 对话框class CListBox自绘Dlg : public CDialogEx{// 构造public: CListBox自绘Dlg(CWnd* pParent = NULL); // 标准构造函数原创 2017-09-29 14:47:17 · 2332 阅读 · 8 评论 -
常用控件:列表框控件ListBox
列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中一次只能选择一个列表项,而多选列表框可以同时选择多个列表项。 列表框也会向父窗口发送通知消息。这些通知消息含义如下: LBN_DBLCLK:用户用鼠标双击了一列表项,只有具有LBS_NOTIFY的列表才能发送该消息。转载 2017-09-29 10:10:18 · 3600 阅读 · 0 评论 -
CListCtrl控件的自绘操作
1、CListCtrl控件 :OwnerDraw Fixed = True,创建一个CListCtrl类的派生类CMyListCtrl,同时创建一个CMyListCtrl控件类型变量:CMyListCtrl m_cList;。CListCtrl控件的自绘主要是CMyListCtrl类中重写DrawItem虚函数。流程:1.主对话框中CListCtrl的一些初始化操作:BOOL原创 2017-09-28 13:45:08 · 3155 阅读 · 5 评论 -
标签控件Tab
1、创建一个对话框应用程序,并创建3个子对话框。ID分别为:IDD_PAGE1、IDD_PAGE2、IDD_PAGE3。设置属性:child、无边框。2、为三个对话框分别绑定一个类:CPage1、CPage2、CPage33、为tab控件绑定一个控件变量:m_tab4、在主对话框的头文件中定义3个对话框类的对象:class CTabCtrlDlg : public CDialogE原创 2017-09-12 10:26:59 · 659 阅读 · 0 评论 -
CListCtrl控件列表项和列表头图标的显示
1、为CListCtrl控件绑定一个控件变量:m_List。2、插入三个ICON作为列表项的图标显示,ID分别为:IDI_ICON1、IDI_ICON2、IDI_ICON3。插入两个Bitmap作为列表头图标的显示图标,ID分别为:IDB_BITMAP1、IDB_BITMAP2。3、基本步骤都是:1、Create创建图像列表; 2、向图像列表里添加多个图标; 3、将CImageList对象原创 2017-09-19 14:19:56 · 4441 阅读 · 0 评论 -
ComboBox控件自绘操作
一:1、设置ComboBox控件的属性:Has Strings = True, Owner Draw = variable或fixed,Tyle = Drop List。2、建立一个类:CMyComboBox,派生自:CComboBox,绑定关于CMyComboBox类的控件变量,并声明一个CImageList对象:// 构造public: CImageList m_imgList原创 2017-09-27 13:50:07 · 4307 阅读 · 0 评论 -
SendInput模拟鼠标消息的发送
1实例://获取一个对话框dialog的句柄 HWND hWnd=::FindWindow(_T("#32770"),_T("MsgTest")); if (hWnd!=NULL) { ::ShowWindow(hWnd,SW_SHOWNORMAL); ::SetForegroundWindow(hWnd); //获取dialog上一个Button按钮的句柄 HWND h原创 2016-12-23 15:05:33 · 6721 阅读 · 0 评论 -
SendInput模拟键盘事件控制暴风影音的播放和停止
1This function synthesizes keystrokes, stylus and mouse motions, and button clicks.UINT SendInput( UINT nInputs, LPINPUT pInputs, int cbSize ); ParametersnInputs Specifies how many str原创 2016-12-23 14:37:18 · 997 阅读 · 0 评论 -
为图片控件加载位图+为鼠标加载图标
1、为图片控件加载位图(bmp格式):这里只讲动态加载情况。首先都要导入BMP资源到程序里面;其次添加代码动态加载:1动态加载:1)HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP3)); m_BitmapStatic.SetBitmap(hBitmap); //原创 2016-12-24 19:57:49 · 604 阅读 · 0 评论 -
OnDraw和OnEraseBkgnd绘图区别
今天实验了一下绘图操作,发现在OnDraw函数中绘图时有闪烁现象,但是在OnEraseBkgnd里面绘图却不存在此现象。1绘图代码如下:CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP4); CDC CompatibleDC; CompatibleDC.CreateCompatibleDC(pDC); CompatibleDC.Sel原创 2017-01-06 10:38:44 · 914 阅读 · 0 评论 -
SetROP2设置绘图模式
一、函数原型:int SetROP2( HDC hdc, int fnDrawMode);二、返回值:函数调用成功后返回调用前的模式,调用失败则返回零。三、参数:1、R2_BLACK//Pixel is always black. 所有绘制出来的像素为黑色2、R2_WHITE//Pixel is always white. 所有绘制出来的像素为白色原创 2016-12-21 15:24:39 · 2299 阅读 · 0 评论 -
为控件添加Tip提示功能CToolTipCtrl
为控件增加Tip提示功能,首要的工作是创建一个CToolTipCtrl控件,这是提示信息的载体,因为提示信息是要显示在此控件上的。MFC上说的很清楚,创建CToolTipCtrl控件要分为两步:You construct aCToolTipCtrl in two steps. First, call the constructor to construct theCToolTipCtr原创 2016-12-25 13:17:37 · 2368 阅读 · 0 评论 -
在Picture Control控件上显示JPG图片并让图片适应控件的大小
CImage image; int cx, cy; CRect rect; //根据路径载入图片 char strPicPath[]="D://Test11.jpg"; image.Load(strPicPath); //获取图片的宽 高 cx = image.GetWidth(); cy = image.GetHeight(); CWnd原创 2017-01-08 17:53:48 · 10293 阅读 · 1 评论 -
使用CRectTracker函数画框时输出提示信息
如图那个红色的提示框!void CClipScreenToolDlg::DrawMessage(CRect &inRect){ //截取矩形大小信息离鼠标间隔 const int space=3; //设置字体颜色大小 CClientDC dc(this); dc.SetTextColor(RGB(255,0,0)); dc.SetBkMode(...原创 2017-01-19 09:28:02 · 560 阅读 · 0 评论 -
两种方法将CListCtrl控件中列表中的数据保存到文件中
使用两种方法将列表中的数据保存进行文档中:1、使用CFile类;2、使用归档类CArchive类。要保存的列表数据只有3列,如下:方法一:使用CFile类保存,要定义一个固定的结构体存储数据,然后将结构体整体保存进文档中。定义结构体:typedef struct sData{ char szName[50]; char szId[255]; char szPW[30原创 2017-10-27 09:51:55 · 3012 阅读 · 4 评论 -
窗口、CListCtrl控件、Edit控件设置背景图片
如下图所示:首先要导入bmp格式的背景图片:1、窗口绘制背景图:BOOL C账号管理器Dlg::OnEraseBkgnd(CDC* pDC){ CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap Cbp; Cbp.LoadBitmap(IDB_FILEMGR); MemDC.SelectObject(&Cbp);原创 2017-10-27 10:10:32 · 1544 阅读 · 0 评论 -
CTreeCtrl---树控件自绘
效果:1、原理:在CTreeCtrl的派生类CMyTreeCtrl的OnPaint()函数中逐行进行绘制。2、要点: 1)创建CTreeCtrl的派生类CMyTreeCtrl; 2)为树型控件绑定一个控件类型变量CMyTreeCtrl m_Tree; 3)设置属性has b原创 2017-10-11 15:14:40 · 4322 阅读 · 4 评论 -
CFile类的使用
CFile类的声明保存在afx.h头文件中。CFile类是MFC文件类的基类,提供非缓冲方式的二进制磁盘输入、输出功能;并直接通过派生类来支持文本文件和内存文件。提供访问本地文件内容的功能,不支持访问网络文件的功能。CFile类的成员变量:m_hFile:表示一个打开文件的操作系统文件句柄。通过对m_hFile与CFile::hFileNull的比较来判断该文件是否已经打开。...转载 2017-03-06 15:02:05 · 3711 阅读 · 0 评论 -
ProcessMessageFilter的使用
在对话框程序中,我们经常是利用对话框上的子控件进行命令响应来处理一些事件。如果我们想要让对话框(子控件的父窗口)类来响应我们的按键消息,我们可以通过ClassWizard对WM_KEYDOWN消息进行响应,当程序运行后,我们按下键盘上的按键,但对话框不会有任何的反应。这是因为在对话框程序中,某些特定的消息,例如按键消息,它们被Windows内部的对话框过程处理了(即在基类中完成了处理,...原创 2017-01-22 10:10:18 · 838 阅读 · 0 评论 -
CListView中OnTimer()函数只进入一次的问题
今天写一个服务自启程序,遇到了一个问题:在CListView中的OnTimer()函数,只进入一次就不进入了,经过百度查找到了原因:原来在CListCtrl中,基类的的OnTimer()会调用KillTimer,杀死你的定时器。1、下面是原因:SYMPTOMS If you call the SetTimer function to send periodic WM_TIMER messages ...原创 2018-03-29 08:44:02 · 782 阅读 · 3 评论 -
一个浮动、分行工具栏的实现
定义:CToolBar m_MyToolBox;在OnCreate()函数中创建工具栏:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndStatusBar.Create(this原创 2017-11-15 21:43:30 · 998 阅读 · 0 评论 -
橡皮筋类(CRectTracker )的使用方法
1、定义一个橡皮筋类的对象(之所以派生是因为可以自己定义框体的颜色):CMyRectTracker m_RectTracker; CMyRectTracker 派生自CRectTracker类。2、初始化对象操作:m_RectTracker.m_nStyle = CRectTracker::solidLine|CRectTracker::resizeOutside; m_Re原创 2017-11-29 15:52:58 · 1790 阅读 · 0 评论 -
CMenu自绘
1、创建一个CMenu类的派生类,并重写DrawItem(LPDRAWITEMSTRUCT lpDS)、MeasureItem(LPMEASUREITEMSTRUCT lpMS)函数:如下:#pragma once#include "afxwin.h"class CMyMenu :public CMenu{public: CMyMenu(void); ~CMyMenu(void原创 2017-11-13 10:35:32 · 1618 阅读 · 0 评论 -
CListCtrl控件删除多个选中行时问题的解决
只需注意以下一点:/*每删除一行时,删除行之后的行序号会整体前移一位;也就是说,除非从后向前删除,否则会出错。*/以下给出两种解决方法:for(int i = m_List.GetItemCount()-1; i >= 0; i--) { if( m_List.GetItemState(i, LVIS_SELECTED) ==原创 2017-10-26 11:12:14 · 880 阅读 · 0 评论 -
CMemoryDC封装类
#ifndef __MEMDC_H__#define __MEMDC_H__//Author:www.baojy.comclass CMemoryDC :public CDC{ CSize m_size;public: void BitTrans( int nXDest, // 目标起点X int nYDest, // 目标起点Y int n原创 2017-11-01 08:35:12 · 1210 阅读 · 0 评论 -
不带doc\view结构的单文档窗口多次分割
如上图,分两步:1、分割成一行两列的窗口,左边树视图,右边比较特殊,是一个CFrameWnd派生类的框架。窗口分割在主框架的视图类中进行,注意不在主框架的OnCreateClient中分割。int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CWnd::OnCreate(lpCreateStruct) == -1)原创 2017-10-24 13:28:52 · 332 阅读 · 0 评论 -
不带doc/view结构的窗口分割实现
不带doc/view结构的窗口分割,在CMainFrame::OnCreateClient()函数中实现时会有一些问题:窗口已经分割了,但是看不见,拖动分隔条可以看见,刷新窗口后又看不见了...在这里给出的解决方法是:在视图的OnCreate函数中进行窗口的分割。1、利用向导创建两个视图类,作为分割后左右两个视图:class CLeftView : public CTree原创 2017-10-23 14:54:11 · 369 阅读 · 0 评论 -
基于各种视图单文档框架的创建
首先创建一个普通的单文档程序,去掉文档/视图结构:2、依据上面的创建方式,视图为默认视图,而且不能再创建向导中更改视图。用类向导创建一个CMainView 类:class CMainView : public CListView{ DECLARE_DYNCREATE(CMainView)public: CMainView(); // 动态创建所原创 2017-10-23 10:13:12 · 500 阅读 · 0 评论 -
CSliderCtrl自绘开发
效果:鼠标热点(黄色):1、首先说一下,当我们拖动滑块控件时,滑块控件的响应函数:1)当滑块是横向滑块时,为滑块父窗口的WM_HSCROLL消息添加响应函数;2)当滑块是竖向滑块时,为滑块父窗口的WM_VSCROLL消息添加响应函数。2、自绘原理:创建一个CSliderCtrl的派生类:CMySliderCtrl;建立一个派生类类型的控件变量:CMySliderCtrl原创 2017-10-13 14:42:45 · 1224 阅读 · 0 评论 -
Invalidate(TRUE)与Invalidate(FALSE)区别
使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息。使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_PAINT消息。WM_ERASEBKGND消息的作用以背景色填充客户区,因此他会将之前绘制的图像情况,然后响应WM_PAINT消息后,会调用OnPaint函数,进行响应图像绘制工作。故Invali...转载 2017-10-13 15:27:36 · 1705 阅读 · 2 评论 -
设置单文档CListView视图中列表的行高
首先应该设置CListCtrl的LVS_OWNERDRAWFIXED属性:BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs){ /* 注意在添加类型时不要直接使用 = ,这样会消除掉cs以前的style。 */ cs.style |= LVS_REPORT|LVS_SHOWSELALWAYS|LVS_OWNERDRAWFIXED原创 2017-10-29 20:36:57 · 1284 阅读 · 0 评论 -
MFC修改任务栏,窗口和exe图标
最近开始学习MFC,发现程序在任务栏,窗口和exe都使用的默认图标,那么,我们想使用自己的图标该如何做?1、我们将自己要使用的icon的图标导入项目中。资源视图--》xx.rc(xx代表项目的名称)---》右键Icon--》添加资源---》将自己的准备的Icon添加进来即可如图:2、导入后,修改属性,名称变成如下3、来转载 2017-01-19 18:42:18 · 2318 阅读 · 1 评论 -
模仿QQ截图时的灰色透明背景
void CClipScreenToolDlg::ChangeBackGround(HDC &hDC,CRect rect){ m_hGrayBitmap=CreateCompatibleBitmap(hDC,m_nGrayWidth,m_nGrayHeight); HDC hMemDC=CreateCompatibleDC(hDC); SelectObject(...原创 2017-01-19 13:23:48 · 1380 阅读 · 0 评论 -
获取CListCtrl选中行行号的多种方法
获取选中行的行号分为获取选中多行的行号和获取单行选中的行号。以下代码都经过测试没问题,涉及到一些函数请自行查询MSDN.获取多行选中的行号:方法一:CString str; for(int i=0; i<m_List.GetItemCount(); i++) { if( m_List.GetItemState(i...原创 2017-02-24 09:55:51 · 14148 阅读 · 0 评论 -
带图标工具栏的创建以及提示功能的添加
一、带图标工具栏的创建:第一步:将bmp位图或是ICON图标资源加入到资源视图中:我这里是bmp资源,添加资源时要按照你想要的顺序添加第二步,在响应的头文件中定义CToolBar对象和CImageList对象:private: CToolBar m_ToolBar; CImageList m_ImageList;第三步,在对话框的初始化函数中进行带图标工具栏的初始...原创 2017-02-21 14:29:58 · 1332 阅读 · 0 评论 -
TabCtrl控件的使用
本文主要介绍使用CTabCtrl的封装类CTabSheet来操纵TabCtrl控件,内容来自VC++驿站的SYC老师,如果你想添加自己想要的功能,可以进行封装的不断完善。下面先贴出封装类的 TabSheet.h文件和TabSheet.cpp文件,如下:下面是TabSheet.h文件:#pragma once// CTabSheet#define MAX_PAGES 10...原创 2017-02-24 08:47:03 · 1598 阅读 · 0 评论 -
MFC---分页技术
分页技术是指父窗口中包含多个子窗口页面,我们通过点击上一页、下一页来进行页面的切换。1、新建一个对话框应用程序:“对话框分页”,并且新建3个对话框作为3个页面,设置3个对话框的属性:child、无边框 等。三个对话框的ID分别为:IDD_P1、IDD_P2、IDD_P32、将3个新建的对话框分别关联3个类:CPage1、CPage2、CPage33、头文件包含、新建三个类对象:#p原创 2017-09-10 20:37:31 · 2544 阅读 · 0 评论