![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC
文章平均质量分 50
PeterPan19890802
这个作者很懒,什么都没留下…
展开
-
WS_CLIPCHILDREN和WS_CLIPSIBLINGS
WS_CLIPCHILDREN样式从字面上可以理解成ClipChildren,裁减子窗口。MSDN里的E文解释:Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.原创 2010-04-15 17:57:00 · 5452 阅读 · 0 评论 -
设置套接字为非阻塞的方法
WSAAsyncSelectioctlsocket WSAIoctl原创 2010-05-19 18:54:00 · 895 阅读 · 0 评论 -
Static控件的消息
如果Static控件设置了Notify消息的话,点击Static控件或者在Static控件上移动的话,消息就是Static控件自己发送的,这时候也存在消息的反射。如果Static控件没有设置了Notify消息的话,点击Static控件或者在Static控件上移动的话,消息就是对话框发送的,这个时候对话框接管了Static控件的所有消息。原创 2010-05-19 21:07:00 · 920 阅读 · 0 评论 -
MFC 修改窗口类名
单文档:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs WNDC原创 2010-05-24 14:13:00 · 1278 阅读 · 0 评论 -
VC剪切板
<br />本文主要介绍了VC++/MFC中如下内容的剪贴板操作:<br />1、文本内容的操作<br />2、WMF数据的操作<br />3、位图的操作<br />4、设置使用自定义格式<br />5、感知剪贴板内容的改变<br />6、自动将数据粘贴到另一应用程序窗口 <br />一、文本内容的操作<br />下面的代码示范了如何将文本内容复制到剪贴板(Unicode编码的先转化为ASCII):<br />CString source;<br />//文本内容保存在source变量中<br />if(转载 2010-07-19 17:03:00 · 3284 阅读 · 0 评论 -
MFC中添加热键
热键分为局部和全局对于局部热键我们可以再PreTranslateMessage中进行捕获对于全局热键的步骤是这样第一:先注册 RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2);//F2为热键 第二:添加消息响应头文件:afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);原创 2010-05-26 15:46:00 · 917 阅读 · 0 评论 -
MFC的PreTranslateMessage截获Ctrl + 滚轮消息
<br />if (LOWORD(pMsg->wParam) == MK_CONTROL && pMsg->message == WM_MOUSEWHEEL) { MessageBox("OK"); }原创 2010-06-02 16:16:00 · 3245 阅读 · 0 评论 -
VC中BSTR、Char*、CString和CComBSTR类型的转换
1、char*转换成CString若将char*转换成CString,除了直接赋值外,还可使用CString::format进行。例如:char* p = "This is a test"; 或CString theString = p;theString.format("%s", p);theString = p;2、CString转换成char*若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:方法一,使用强制转换。例如:CString theString( "This is原创 2010-06-05 21:25:00 · 10371 阅读 · 0 评论 -
BSTR在函数中的使用
<br />右值:<br />BSTR bstr = ::SysAllocString("cert");<br />SetText(bstr);<br />SysFreeString(bstr);<br /> <br />左值:<br />BSTR bstr = NULL;<br />GetText(bstr); //这个函数里面要用::SysAllocString来给bstr申请内存<br />SysFreeString(bstr);原创 2010-06-05 21:45:00 · 936 阅读 · 0 评论 -
进程通信——使用WM_COPYDATA消息通信
使用WM_COPYDATA消息通信<br />对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞。所以,对于大量数据来说,用SendMessage()就容易造成窗口假死。<br /><br />通过WM_COPYDATA消息实现进程间通信的方法<br />在Win32中,WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在原创 2010-06-09 16:30:00 · 763 阅读 · 0 评论 -
MFC使用滚动条
先在对话框的OnInitDialog中设置滚动条的范围 CScrollBar *pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1); pScrollBar->SetScrollRange(0, 100); 接下来响应对话框的WM_VSCROLL和WM_HSCROLL消息void CXXXDlg::OnVScroll(UINT n原创 2010-05-17 14:53:00 · 1150 阅读 · 0 评论 -
WM_DRAWITEM消息处理流程
WM_DRAWITEM是一般的消息,如果一个按钮设置了自绘,那么他会给父窗口发送WM_DRAWITEM,父窗口找到消息处理函数看源码: void CWnd::OnDrawItem(int /*nIDCtl*/, LPDRAWITEMSTRUCT lpDrawItemStruct){ if (lpDrawItemStruct->CtlType == ODT_MENU) { CMenu*原创 2010-05-16 11:20:00 · 1147 阅读 · 0 评论 -
控件子类化的两种方式
1. 给控件关联变量,修改类名2. 定义一个成员变量,如CPassButton btn; 然后btn.SubclassDlgItem(IDC_BUTTON2, this); IDC_BUTTON2是窗口的ID,第二个参数是窗口的父窗口的句柄原创 2010-05-15 11:13:00 · 776 阅读 · 0 评论 -
窗口的子类化和超类化
1. 子类化 改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。在SDK编程范畴内,子类化就是改变一个窗口实例的窗口函数(通过GetWindowLong()和SetWindowLong()),子类化所要做的就是为某窗口实例编写新的窗口函数。其操作是在实例级别上进行的。在MFC中子类化的情况有所不同:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类原创 2010-04-18 15:43:00 · 596 阅读 · 0 评论 -
对话框及其子控件的内部创建过程之详细分析
创建非模态对话框时,首先程序最先开始调用CreateDialogIndirectParam函数来创建对话框 , 在CreateDialogIndirectParam中调用CreateWindowEx函数创建对话框主框架, 这时 CreateWindowEx函数发出WM_CREATEX消息,开始调用OnCreate函数。 注意这时所有对话框的子控件都还没创建 ,所以在OnCreate函数中对子控转载 2010-05-08 14:22:00 · 4974 阅读 · 1 评论 -
MFC窗口销毁过程
假设自己通过new创建了一个窗口对象pWnd,然后pWnd->Create。则销毁窗口的调用次序: 1. 手工调用pWnd->DestroyWindow(); 2. DestroyWindow会发送WM_DESTROY; 3. WM_DESTROY对应的消息处理函数是OnDestroy(); 4. DestroyWindow会发送WM_NCDESTROY; 5. WM_NCDE转载 2010-05-08 16:09:00 · 824 阅读 · 0 评论 -
MFC多线程程序设计(源自深入浅出MFC)
一个进程的PDB通过一个"MODREF链表"连接到其所使用的所有模块一个线程的TDB里面都放置了消息队列只有UI线程的优先级会改变,Worker线程的优先级不会改变线程上下文 当线程暂停的时候要求把CPU拥有权让出来,以备将暂停之前一刻的状态统统记录下来。AfxBeginThread和CreateThread函数创建线程的时候,内部调用::CreateThread或_beginthr转载 2010-05-10 21:04:00 · 661 阅读 · 0 评论 -
命令传递(源自深入浅出MFC)
如果是一般的windows消息,则一定是由派生类流向基类,没有旁流的可能。 如果是命令消息wm_command,那就有奇特的路线了。 afxwndproc->afxcallwndproc->CWnd::WindowProc->oncommand->OnCmdMsg 我们看看CFrameWnd的源码 这样就完成了消息的横流转载 2010-05-11 12:11:00 · 746 阅读 · 0 评论 -
再谈客户区对话框拖动操作
<br />当初实现拖动的基本思路是改写 OnNcHitTest 例程,让鼠标在客户区中的点击始终返回 HTCAPTION 而不是 HTCLIENT,从而诱使 <br /> Windows 实现拖动操作。没想到这样做使上下文菜单的操作出现了混乱,原因是如果强制 OnNcHitTest 在客户区返回 HTCAPTION,Windows 不会发送 WM_CONTEXTMENU <br /> 消息。有一个解决是调用 GetKeyState 函数,在返回 HTCAPTION <br /> 之前检查鼠标右转载 2010-07-06 16:13:00 · 754 阅读 · 0 评论 -
CRectTracker(橡皮筋)类的使用
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中,在桌面上用鼠标拖拽,便可以看到一个虚线的矩形框,它便是橡皮筋.它可以用做显示边界,你也可以扽它的八个角用来放大缩小,做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用;介绍橡皮筋类前,先介绍其他两个类:(1) Cpoint 类或Point类,cpoint.x cpoint.y,转载 2010-05-13 20:48:00 · 2113 阅读 · 1 评论 -
MFC 程序逆向
上篇啰里啰嗦地说了一大堆,其实所说的消息都是PostMessage方式的。MFC中还有另外一种很常见的消息发送方式,就是SendMessage函 数。这个消息起始路径和上篇所讲的完全不一样。这种方式下,前面的7个站点均不执行,而是直接进入第8站点:User32内核,从第8站点出来后,这两种 消息方式走上了同一条道路,进入第9个站点或第10个站点了,真是殊道同归。对于MFC窗口程序,所有窗口都使用同转载 2010-05-12 16:55:00 · 1531 阅读 · 0 评论 -
MFC消息完成消息反射
BOOL CWnd::OnCommand(WPARAM wParam, LPARAM lParam) // return TRUE if command invocation was attempted{ UINT nID = LOWORD(wParam); HWND hWndCtrl = (HWND)lParam; int nCode = HIWORD(wParam);原创 2010-05-16 21:37:00 · 858 阅读 · 0 评论 -
ListCtrl设置可写
<br />// MyListCtrl.cpp : 实现文件//#include "stdafx.h"#include "EditListCtrl.h"#include "MyListCtrl.h"// CMyListCtrlIMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)CMyListCtrl::CMyListCtrl(){}CMyListCtrl::~CMyListCtrl(){}B原创 2010-06-19 10:54:00 · 1929 阅读 · 0 评论