
SDK/MFC
文章平均质量分 65
键盘上的疯兔
乐于钻研问题背后的规律,并乐于编程证实。
展开
-
关于WM_ERASEBKGND和WM_PAINT的深刻理解
关于WM_ERASEBKGND和WM_PAINT的深刻理解一直以来,对于WM_PAINT和WM_ERASEBKGND消息不是很清楚,从书上和网上找了很多资料,大体上有以下几点说法:1.WM_PAINT先产生,WM_ERASEBKGND后产生2.WM_PAINT产生后,在调用hdc = BeginPaint(hWnd, &ps); 如果ps.fErase为true,则BeginPaint转载 2011-11-15 21:49:08 · 1356 阅读 · 0 评论 -
一种保持VC对话框布局的简便方法
在窗口可缩放的VC应用程序中,在缩放时保持窗口的布局很重要。网上有很多复杂的布局控制代码可供参考。有些代码很强大,但如果你的窗口只是个简单的对话框,也许可以试试本文的方法。这个方法够简单。 别去管那些锚点、对齐之类的词汇了,强大的功能在某种程度上也意味着更多的代码。简单地记住当前的窗口布局,然后按比例缩放这些控件。这样的方法在很多应用中,效果也非常不错。 本着更简单的精神,我没有定义一个基转载 2011-01-16 19:27:00 · 1003 阅读 · 1 评论 -
手工添加消息响应函数
手工添加消息响应函数手工消息响应函数,最原始的方法是,在消息映射表中,添加一个合适的消息映射表项.首先看看消息映射表项:struct AFX_MSGMAP_ENTRY{ UINT nMessage; // windows message UINT nCode; // control code or WM_NOTIFY code UINT nID; /原创 2011-02-18 23:11:00 · 2273 阅读 · 0 评论 -
SDI程序三元组的产生(VC2005)
SDI程序三元组的产生(VC2005) theApp如何构造保存CWinApp指针就跳过了。从 pThread->InitInstance() 开始. CWinApp成员m_pDocManager(CDocManager*)用m_templateList (CPtrList)管理CDocTemplate指针列表。而派生自CDocTemplate类的CSingleDocTe原创 2011-01-16 23:35:00 · 1069 阅读 · 0 评论 -
串形化与动态创建(Serilize & DynamicCreate)
串形化与动态创建(Serilize & DynamicCreate)问题的来源当知道一个类的名称,比如是“CNode”怎样创建它的对象呢?你可能会用以下的方式:CString className;//从文件或屏幕上读取类名到className中CObject* p = new className;那就大错特错了,没有一个c++编译器支持语言版的动态创建! 动态创原创 2011-01-14 08:43:00 · 1045 阅读 · 0 评论 -
DLL自定义窗口类
DLL自定义窗口类2011-1-9目的是模拟Windows在DLL中注册窗口类,然后在其它模块中调用。代码如下:调用模块:#include #pragma comment (lib, "F://MyClass//debug//MyClassDLL.lib")HWND MyCreateWindowEx( DWORD dwExStyle, LPCT原创 2011-01-09 17:33:00 · 2030 阅读 · 0 评论 -
绘制透明背景位图
// when blitting from a monochrome DC to a color DC, // the color black in the source turns into the destination's text color, // and the color white in the source turns into the destination's backg原创 2013-07-29 18:07:59 · 2486 阅读 · 0 评论 -
Windbg 查看MFC类重载虚函数
Windbg 查看MFC类重载虚函数1.进入断点后,查看类的虚函数表指针: 2.编写脚本,用于反汇编虚函数表中的各个虚函数地址:方法1:$$usage: $$>a<script.txt address.foreach ( tmpvar { dd ${$arg1} L64 } ){ .if ( ${tmpvar} < ${$arg1} ) { uf原创 2013-09-07 13:32:14 · 2738 阅读 · 0 评论 -
The format of string resources
This article give a detail of usage of FindResourceEx for string table: http://blogs.msdn.com/b/oldnewthing/archive/2004/01/30/65013.aspxUnlike the other resource formats, where the resource i转载 2013-09-11 14:37:49 · 1855 阅读 · 0 评论 -
CCmdUI工作原理及作用
CCmdUI工作原理及作用ON_UPDATE_COMMAND_UI会一个带有CCmdUI指针参数的函数来响应一个菜单项的单击。第一次见到它时,我差点晕过去! 让我们来看看它们是怎么工作的。当用户点击某个菜单时,在菜单弹出之前,会产生一个WM_INITMENUPOPUP消息,并传给菜单所在窗口。以SDI程序为例,CFrameWnd会用void CFrameWnd::OnInitMen原创 2011-01-18 17:03:00 · 9145 阅读 · 0 评论 -
MFC注册窗口类
MFC带有注册("register")字样的函数不少呀!主要有下面几个:AfxDeferRegisterClassBOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)LPCTSTR AFXAPI AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor, HBRUSH hbrBackgr原创 2011-01-16 20:34:00 · 3631 阅读 · 0 评论 -
解决“没有可用于当前位置的源代码”问题
我写了一个函数,昨天还能在这个函数中加入断点进行调试,但是今天却跳不进去了。按F11单步运行,发现出现"没有可用于当前位置的源代码"。同样弹出“源文件与模板生成时的文件不同”对话框。弄了半天,还是没有解决。提供几种方法: 1. (我用这个办法获得成功)工具->选项->调试->常规->去掉“要求源文件与原始版本完全匹配”复选框就OK///现在回想一下,我在进行调试的时候在 appmodu转载 2011-01-15 09:01:00 · 1610 阅读 · 0 评论 -
使用RegEnumValue清理IE历史记录
#include #include //for '_T': identifier not found#include using namespace std;BOOL ClearHistory(){ HKEY hKEY; HKEY hKeyRoot = HKEY_CURRENT_USER; DWORD index = 0; TCHAR valueName[MAX_PA原创 2011-12-26 22:09:56 · 1646 阅读 · 0 评论 -
为custom dialog box class定义两个窗口过程
#include #include "resource.h"LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ switch ( uMsg ) { case WM_CLOSE:原创 2012-01-18 10:26:34 · 905 阅读 · 0 评论 -
选项卡控件SDK程序
#undef UNICODE#undef _UNICODE#include #include #include "resource.h"BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam原创 2012-01-20 22:12:07 · 1527 阅读 · 0 评论 -
不指定主窗口,程序不能退出消息泵
下面是InitInstance() 中的一段代码 MyWnd tWnd; //自定义的一个窗口类 CRect rc(100,100,600,550); tWnd.CreateEx(0,_T("Button"),_T("my name is button"),WS_POPUP,rc,NULL,0); tWnd.ShowWindow(SW_SHOW); this->m_pMainW原创 2012-02-12 15:56:21 · 1512 阅读 · 1 评论 -
创建指定大小的文件
方法一:#include void main(){ int size = 24;//24个字节 HANDLE hFile = CreateFile("test.dat", GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); HANDLE原创 2011-06-12 17:22:00 · 1905 阅读 · 0 评论 -
OnIdle的调用
OnIdle的调用首先看GetMessage(PumpMessage中被调用)与PeekMessage的区别:当消息队列为空时,程序会被阻塞在GetMessage的调用处。这时系统就有会去照顾其它进程了。而PeekMessage不会挂起,而是耗掉系统分配给它的时间片。 在Run函数中要解决的问题是,在消息队列为空的时间调用OnIdle方法干一些私事,但最好不会太影响别人。怎么调原创 2011-01-17 23:24:00 · 3500 阅读 · 0 评论 -
MFC动态创建等几个宏解读
C++语法理解1.静态数据成员具有静态生存期。 2.派生类与基类共享一份静态成员数据。引用C++ primer的一段话:"If a base class defines a static member there is only one such member defined for the entire hierarchy. Regardless of t原创 2011-01-13 23:42:00 · 1780 阅读 · 0 评论 -
获得当前使用网卡名
#include #include //for GetAdaptersInfo#include #pragma comment(lib, "Iphlpapi.lib")void GetAdapterName(char* AdapterName){ unsigned long len=0; PIP_ADAPTER_INFO pinfo = NULL; GetAdaptersIn原创 2011-06-12 23:19:00 · 1755 阅读 · 0 评论 -
MFC模态对话框的消息循环
MFC模态对话框的消息循环单线程程序, 当主窗口响应函数中弹出模态对话框时,为什么主窗口响应函数可能照常工作?当弹出模态对话框时,线程的消息循环无法返回,父窗口的事件本应没人处理,应该处于卡死状态,但实事上父窗口是可以正常响应能接收到的消息的,比如计时器传来的WM_TIMER 及系统托盘菜单传回来的WM_COMMAND。之前的消息循环无法返回是正确的,但模态对话框并不意味着死循原创 2013-09-05 16:45:46 · 7112 阅读 · 2 评论