![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MFC
该专栏介绍了在MFC中使用到的知识点
糯诺诺米团
当他回首往事的时候,不会因为碌碌无为、虚度年华而悔恨,也不会因为为人卑劣、生活庸俗而愧疚。
展开
-
MFC与Qt多个控件响应统一响应消息处理
就目前使用C++开发框架来说,今天来讲述下MFC框架下与Qt框架下,如何让多个控件响应统一消息处理方法。功能:假设有5个按钮,需要响应同一个处理函数,该如何实现呢?原创 2024-01-06 13:21:52 · 760 阅读 · 10 评论 -
MFC模拟消息发送,自定义以及系统消息
在有些时候系统定义的消息不能完全满足程序的应用,这时候就需要进行消息自定义了,那么该如何实现自定义消息呢?在MFC框架下,分配了WM_USER之后的消息都是开发人员可以自定义的消息ID。,消息ID号是:WM_USER+1如果要是你的程序中只存在了一两个自定义消息,就没有必要写成上面的格式了。这种格式的好处:可以根据功能划分自定义消息区域。假设你目前正在开发一个仅供公司内部使用的基础框架类,在自定义消息的时候,需要区分哪些是自己开发使用的,哪些是对外开发者调用的。分工明确,不容易消息错乱。原创 2024-01-06 08:43:56 · 1514 阅读 · 0 评论 -
MFC框架下,加密图片加载并显示功能
对于这一部分图片加载来说,功能不难,CImage::load方式可以直接加载图片,难点就在于加密图片,读取文件的时候不再是任何图片格式,不再是简单的加载路径的方式,而是采用字符流的方式,这里涉及到了内存分配以及加锁解密等底层操作。当我们看到代码的时候就会觉得,原来是这么简单,实际上难的如何将二进制流转换成可识别的流信息。我是糯诺诺米团,一名C++开发程序媛~原创 2024-01-05 08:38:30 · 1271 阅读 · 0 评论 -
MFC框架下自绘CEdit控件
以上就是对MFC框架下CEdit的控件的风格设置啦,与重绘OnPaint相比较来说,比较简单,理解起来也很是容易,只要掌握了反射机制,也就轻而易举了。今天的更新就到这里了~原创 2022-09-30 09:22:53 · 1313 阅读 · 0 评论 -
MFC|按钮的自绘
根据以上对按钮的四种相应操作就可以实现四态变化了!难点:在绘制过程中,根据不同的消息做不同的相应操作以及更换状态标识这里绘制的难点。今天的更新就到这里了~我是糯诺诺米团,一名C++开发程序媛~原创 2022-09-29 08:21:49 · 878 阅读 · 0 评论 -
MFC|自绘CStaic刷新不及时问题
我们在绘制这些静态文本控件时,多数情况下不采取双缓存机制的,我们需要在CStatic::SetWindowTextW函数中做一些特殊处理。所以,为了避免这种情况,最简单的方式就是:获取当前控件区域的父窗口背景色,替换到该控件区域,每次在重新设置文本时,进行刷新。根据获取的父窗口指针,从而可以获取到父窗口的区域,并转换成当前控件的区域,直接进行刷新,强制给CStatic替换背景。如果想尝试的伙伴们可以试试,但是你会发现,设置了双缓存之后,控件的透明背景效果居然不生效了!那么,这种情况一般是在什么时候出现呢?原创 2022-09-28 09:02:00 · 823 阅读 · 0 评论 -
MFC下自绘CStatic控件
1:文本字体颜色值设置;2:背景色以及背景图片设置;3:是否填充背景色;4:文本的对齐方式原创 2022-09-26 11:35:40 · 1544 阅读 · 1 评论 -
CListBox的基本使用
假设给CListBox定义一个变量m_listbox,以下操作全用变量表示1:删除所有数据m_listbox.ResetContent();翻译 2017-06-22 16:55:12 · 1021 阅读 · 0 评论 -
在使用CEdit控件时,按回车键,不关闭当前对话框
使用Edit控件时,如果在编辑文字时,按下回车键,当前对话框可能会关闭。解决这个方法的处理第一步:将该控件的属性中 Wants Return == True第二步:重写下面这个函数 virtual BOOL PreTranslateMessage(MSG* pMsg) { i翻译 2017-08-17 17:16:07 · 986 阅读 · 3 评论 -
CEdit限定输入的字符长度
想要实现在输入edit文本信息时,限制住输入的字符长度,势必要用到OnChar消息。当我重写这个消息之后,发现了一些问题:1:为什么重新后的消息不能响应键盘的Backspace?只能响应Delete消息?2:我在重写的OnChar消息中,当获取当前文本内容时,和输入的内容不符?在此,我可以分享下我的思路:当前m_nLength表示设置限定字符串长度的个数第一步:获取以往现有的字符串内容使用GetW...原创 2018-06-06 17:22:24 · 2488 阅读 · 0 评论 -
Edit控件中使用SetWindowTextW时,光标总是在第一位?
最近,我在修改自己绘制的CMyEdit类,发现了一个特别奇怪的问题: 1:当我在自绘CMyEdit时,使用SetWindowTextW()时,发现,每次光标都在第一位显示。 2:当使用m_edit.SetFouce()时,再使用SetWindowTextW()时,也会出现这个问题。后来,说是使用SetSel设置一下光标的位置。好多博友说SetS...原创 2018-09-12 08:19:45 · 1291 阅读 · 0 评论 -
在自绘控件中创建多个CButton按钮时,如果设置按钮的消息(使用ON_COMMAND_RANGE消息)
最近在做一个功能是:在CListCtrl控件中的随意位置添加CButton按钮。并且点击按钮时,让按钮消失。难点:主要是不知道需要创建多少个按钮,需要用户自己设置。所以,使用ON_COMMAND_RANGE这个消息,可以让多个ID响应同一个消息。方便做处理使用方式:第一步:要知道要响应的CButton的起始ID、结束ID。假设现在起始ID = 1236 , 结束ID原创 2017-06-29 11:02:17 · 547 阅读 · 0 评论 -
CListCrtrl的基本使用
CListCtrl m_listCtrl;1:获取选中的内容int ndex = m_listCtrl.GetNextItem(-1 , LVNI_SELECTED);原创 2017-07-10 11:23:32 · 337 阅读 · 0 评论 -
在自绘CListCtrl控件中添加CSliderCtrl控件
在CListCtrl控件中添加CSliderCtrl控件原创 2017-04-25 09:29:50 · 554 阅读 · 0 评论 -
自绘CListCtrl控件中,使用了OnNMClick消息后,外界对话框中再使用时,不能响应消息
问题:在自绘CListCtrl控件时,自绘了OnNMClick消息,当我在对话框中使用自绘控件的OnNMClick消息时,发现该消息不能响应。原因:在自绘控件时,阻止了子窗口向外部父窗口发送该消息。解决:定义消息afx_msg BOOL OnNMClick(NMHDR *pNMHDR, LRESULT *pResult);//在此,一定要注意,返回值一定是BOOL值。因原创 2017-05-26 14:07:16 · 5196 阅读 · 0 评论 -
重绘ListCtrl中增加子控件Edit是,在父控件失去焦点时,子控件不进行隐藏
问题:现在有一个listctrl控件,需要在某一列上添加一个子控件edit。当点击子控件(edit)时,子控件显示出来,父控件(ListCtrl)已经失去焦点了。此时,要是鼠标点击的位置不在该控件内,edit处于显示状态,父控件(ListCtrl)是失去焦点状态。需要解决的问题:当鼠标点击的位置不在该控件内时,子控件应该隐藏。解决思路:想要在鼠标点击父窗口之外,使内部所有的子...原创 2018-10-11 10:40:42 · 395 阅读 · 0 评论 -
在自绘的CLsitCtrl控件单元格内添加Combobox控件
CListCtrl中创建Combobox控件原创 2017-04-25 08:54:09 · 808 阅读 · 1 评论 -
ComboBox控件对子控件做关联时,出现崩溃问题
上一节,我实现了Combobox控件中子控件(edit)可以让光标垂直的效果。后来,发现了一个问题。我使用的开发工具是vs2010.当从工具箱中拖出来的控件时,使用上一章节我推荐的方案,没有问题的。但是,当自己create出来一个控件时,此时就会在下图位置出现崩溃。如图所示:因为,当我Create该控件时,会先走到PreSubclassWindow()消息中,此时,该控...原创 2018-10-22 15:41:37 · 687 阅读 · 0 评论 -
在MFC中使用CListCtrl,实现每行的行高不同
在MFC程序中,其实根据系统提供,只能将每行的高度设置成相同的。但是在实际工程中,有时需要设置不同的行高,但是又保证该控件的使用和系统提供的相似。我觉得很难。我也曾在网上找过相关的资料,但是都是只有提问者,回答者几乎没有。但是我的工程中需要有这样的功能时,我便自己重写继承了下CListCtrl类,在外部使用的时候与CListCtrl控件的功能相同,只是在内部重绘的时原创 2017-01-10 14:35:56 · 3535 阅读 · 0 评论 -
MFC中Edit控件垂直滚动条时,当文本超出时再显示垂直滚动条
现在我需要实现这样一个功能: 想要用edit控件本身的滚动条,并且设置该属性,但是该滚动条会一直存在。效果如下图,很是难看,当没有输入信息时,也会出现垂直滚动条其实,只有在文本超过设定的区域内才会显示(在这我不知道如何上传动态效果图片,所以只有代码展示了)第一步:对于控件属性的设置Multiline = TrueAuto HScroll = FalseAuto ...原创 2018-09-19 08:56:05 · 2750 阅读 · 0 评论 -
CTreeCtrl中使用CxImage添加背景图片,以及给字添加背景图片
在CTreeCtrl中加载背景图片,网上有很多例子,有的可行有的不行,这两天一边看资料一边整理,自己写了一个用CxImage加载图片的方法,大家可以参考下。有的地方还没有完善,不过基本功能可以实现,而且添加图片后屏幕不闪烁。已经试过了。SetReDraw():保证其不要在子节点弹出时重画,而是在子节点已经扩展后重画在做程序时,遇到了一个很白痴的问题,就是我想要实现鼠标滚动消息时,写了之后调原创 2016-07-12 14:23:54 · 1826 阅读 · 0 评论 -
在对话框中使用CTreeCtrl控件时,在OnNMClick消息中如何获取选中的Item以及内容
void CModeDlgOne::OnNMClickTree1Mfc(NMHDR *pNMHDR, LRESULT *pResult){ // TODO: 在此添加控件通知处理程序代码 LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR); DWORD dwpos = GetMessagePos(); TVHITTESTINF翻译 2017-07-24 15:11:43 · 1905 阅读 · 0 评论 -
在自绘CTreeCtrl控件时,双击父结点时,有效区域和字体的区域不同
在自绘CTreeCtrl控件时,我使用CFont font 中 font.CreatePointFont设置文字的字体。但是,当双击父节点时,只能在原来的区域内有效。是因为没有将字体的大小设置到CTreeCtrl控件中SetFont函数里面。CFont font;font.CreatePointFont(100 , L"幼圆");SetFont(font);只需要关原创 2017-08-17 17:10:40 · 328 阅读 · 0 评论 -
在重绘过程中,CTreeCtrl::SelectItem没有响应
使用系统默认的控件,在SelelctItem设置选择的Item时,呈现以下效果当自己自绘该控件时,没有了点击效果,如图所示出现的这个原因是:在重绘过程中,只是在OnLButtonDown和OnLButtonUp中获取了鼠标点击获得的hItem。如果按照我这种方式,只会在用户点击时才会生效,当用户外界使用SelectItem时,不能用程序设置选中效果。应当用“G原创 2018-02-03 08:18:25 · 888 阅读 · 0 评论 -
HasButton为图片进行左右位置偏移时,在使用HSCROLL消息时,出现中断的问题
当绘制完成界面时,在往左移动滚动条时,会出现中断问题。进入调试后,发现是图片的宽度出现该中断的原因是:在绘制图片时位置计算的有问题。距离的计算应该如下其中图片中的阴影区域才是最终的偏移量。使用:1:可以计算出第一个节点距离左边界的距离HTRRHITEM hFistItem = GetFirstVisibleItem();CRectrectFirst;Ge原创 2018-02-05 14:49:30 · 198 阅读 · 0 评论 -
CTreeCtrl基本使用
1:获取选中行的背景,填充整行HTREEITEM currentItem ;CRect rectFull;GetItemRect(currentItem , rectFull , FALSE ) ;********************************************************* 当第三个参数 = TRU翻译 2017-07-19 08:27:07 · 284 阅读 · 0 评论 -
MFC中使用CToolTipCtrl提示框
第一步:需要的头文件#include <afxcmn.h>第二步:在使用的自定义的控件类中,定义类的对象CToolTipCtrl m_ToolTipCtrl;第三步:在构造函数中,激活提示框工具EnableToolTip ( TRUE ) ;m_ToolTipCtrl . Create ( this );m_ToolTipCtrl . Activate ( TRUE );第四步:...原创 2018-05-11 08:15:41 · 1237 阅读 · 0 评论 -
CCombobox控件修改编辑框光标显示位置,呈现:上下垂直状态
使用MFC中系统CCombobox控件中CBN_DROPDWON风格时,edit编辑控件的高度的光标一直处于左上角位置。效果如下图所示:其实,想要实现光标处于垂直状态,如下图所示:这种效果看着就比较顺眼了。在此,有人想要问,怎么改变编辑框的高度呢?有人使用系统的MoveWindow,居然不生效?这个问题我也遇到过。具体为什么不生效,我无法解释,但是我知道如何改变edit...原创 2018-10-19 13:35:23 · 1767 阅读 · 0 评论 -
Combobox控件,使用MoveWindow()移动位置时,OnNcCalcSize消息处理
说到OnNcCalcSize在程序内部的消息处理次数。主要说的是Combobox控件1:如果是从工具箱拖出来的控件只会走一次 OnNcCalcSize() 消息2:从工具箱中拖出来的控件,并且使用了MoveWindow时 走四次 OnNcCalcSize() 消息。 第一次:给hwndICom赋值 第二次:赋值的时候,没有给结构体...原创 2018-10-22 16:12:08 · 1153 阅读 · 0 评论 -
C++中控件一些不为人知的消息流程
1:TreeCtrl控件功能:想要获取点击的Item内容,想着在NM_CLICK消息中处理。以下是我的处理方式:void CTest_TreeCtrlDlg::OnNMClickTreeNormal(NMHDR *pNMHDR, LRESULT *pResult){ // TODO: 在此添加控件通知处理程序代码 *pResult = 0; HTREEITEM ...原创 2018-11-07 11:48:25 · 322 阅读 · 0 评论 -
MFC中MediaPlayer基本功能使用
首先介绍下,当前文章中的基本功能1:播放、暂停、停止、快进、后退、指定播放速度2:设置视频音量、是否静音?3:播放模式:顺序播放、随机播放、单曲播放使用MediaPlayer播放器用到的几个类CWMPPlayer4 m_mediaPlayer; //播放地址关联CWMPControls m_control; //控制按钮关联 CWMPMedia m_m...原创 2019-09-09 14:00:42 · 1549 阅读 · 1 评论 -
mediaPlayer消息PlayStateChangeOcx1解释
消息声明void PlayStateChangeOcx1(long NewState);宏定义ON_EVENT(CMediaDlg, IDC_OCX1, 5101, CMediaDlg::PlayStateChangeOcx1, VTS_I4)消息使用void CMediaDlg::PlayStateChangeOcx1(long NewState){}参数说明...原创 2019-09-06 16:50:11 · 438 阅读 · 0 评论 -
mediaPlayer消息OpenStateChangeOcx1
使用的MediaPlayer消息,是按照以下方式获取的消息声明void OpenStateChangeOcx1(long NewState);宏定义BEGIN_EVENTSINK_MAP(CMediaDlg, CDialogEx) ON_EVENT(CMedia_ShiPinBoFangDlg, IDC_OCX1, 5001, CMediaDlg::OpenStat...原创 2019-09-06 16:43:24 · 227 阅读 · 0 评论 -
MFC中使用MediaPlayer制作视频播放器 --- CWMPMedia解析
对当前类(CWMPMedia)中的一些函数进行说明虽然别的博友也有说明,不过我的说明简单明了,也有一些使用方式,希望给一些正在学习或者说是打算进行试验的人一些参考CString get_name(){ CString result; InvokeHelper(0x2fc, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result...原创 2019-09-06 16:12:58 · 880 阅读 · 0 评论 -
在MFC中使用socket发送简单消息
socket::send简单的数据发送int send(SOCKET s,const char *buff,int len,int flag);发送的数据必须是 const char* 数据,在此,可以用两种方式进行消息发送(因为我就会两种...)条件是:发送十六进制的字节数据第一种方式:使用 new的方式前提需要知道发送的字节的大小,假设,我需要发送的字节大小是10...原创 2019-12-10 15:28:40 · 869 阅读 · 0 评论 -
创建一个子窗口,MouseMove消息一直在触发的解决方法
条件:在主窗口中,创建(create)一个Child属性的子窗口。在子窗口中使用MouseMove消息时,发现,该消息一直被触发。在domal一个Child属性的子窗口时却没有这个问题。为什么呢?原因在CWnd::Create中WS_POPUP属性上,该属性在create中是无效的,想要解决这个问题需要修改对话框属性的一个属性值,如图所示:将Chip Children改成tru...原创 2019-12-05 08:58:46 · 1071 阅读 · 0 评论 -
MFC下设置窗口透明效果
设置窗口透明::SetWindowLong(m_hWnd , GWL_EXSTYLE , GetWindowLong(m_hWnd , GWL_EXSTYLE)| WS_EX_LAYERED);::SetLayeredWindowAttributes(m_hWnd , 0 , 128*0.7 , LWA_ALPHA);原创 2018-09-12 08:11:39 · 1044 阅读 · 0 评论 -
MFC中对话框程序,获取鼠标光标的位置,指向的字符
第一步:获取光标相对于控件的位置POINT cp = GetCaretPos();第二步:获取光标的位置int xy = CharFromPos(cp);第三步:获取光标所在的字符int CharIndex = LOWORD(xy)...原创 2018-09-17 10:23:52 · 4805 阅读 · 0 评论 -
在使用模式对话框时,实时改变对话框的位置
第一步:模式对话框的创建CXXXdlg dlg(this);第二步:将要改变的位置,传给对话框dlg.SetChangeRect(rect); //自己设置函数名第三步:在对话框中的OnInitDialog()函数内设定位置区域MoveWindow(m_rectClient.left , m_rectClient.top , m_rectClient.Width(),m_原创 2017-06-06 16:10:10 · 638 阅读 · 0 评论 -
在MFC程序中获取exe所在的路径
方法一:wchar_t path1[MAX_PATH*100];GetModuleFileName(GetModuleHandle(_T("Test_d.exe")),path1,MAX_PATH*100);wstring path(path1);int nret = path.rfind(_T("\\"));wstring strPath = path.substr(0, nre...原创 2017-05-17 08:40:22 · 1526 阅读 · 1 评论