摘要:关于如何换肤、子类化的解决方案作者:peterbing@sohu.com 对于应用程序的换肤及子类化。下面是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例:第一种:直接用现成的类1、自己写一个类class CButtonXP : public CButton{/*...*/}用MessageMap处理感兴趣的消息。2、用CButtonXP代替CButton来声明变量m_btn;3、在void CAboutDlg:DoDataExchange(CDataExchange* pDX)中加上一句:DDX_Control(pDX, IDB_BUTTON1, m_edit);或.
阅读全文
摘要:WH_CALLWNDPROC钩子监视SendMessage消息的传递,不管是系统内部调用的SendMessage()函数还是用户进程中调用的SendMessage()函数。 SendMessage()把消息直接交给窗口过程WndProc()来处理,WndProc()处理完消息后SendMessage()函数才返回(return resultValue;). 如果设置了WH_CALLWNDPROC类型的钩子,则当SendMessage()把消息交给WndProc时,在WndProc尚未执行前,系统调用CallWndProc钩子函数,钩子函数执行后才执行窗口过程WndProc。 WH_CAL...
阅读全文
摘要:hook提供一种机制,使得程序可以在消息的传递过程中加入自己的处理方法。由于hook增加了消息传递过程中的处理,所以会影响系统性能,应该仅在必须的时候使用hookWindows提供多种不同的hook,每一种访问不同的消息处理,例如,程序可以使用WH_MOUSE来监视鼠标消息。对每种hook,Windows都提供了单独的hook chain。A hook chain is a list of pointers to special, application-defined callback functions called hook procedures。当消息产生时挂接到特定的钩子上,Wind
阅读全文
摘要:首先是预编译(当然是编译之前做点准备工作了!) 常见的预编译指令有:(1)#include 指令,该指令指示编译器将xxx.xxx文件(.h或.cpp都可以,不要以为只有.h能#include)的全部内容插入此处,(2)#define指令 也就是宏展开了(3)#if、#else和#endif指令 在头文件中主要是避免重复调用 (比如说两个头文件互相包含对方)当然也可以用#pragma once,其次是编译 编译是以一个个独立的文件作为单元的,一个文件就会编译出一个目标文件。(这里插入一点关于编译的文件的说明,编译器通过后缀名来辨识是否编译该文件,因此“.h”的头文件一概不理会,而“.cpp”的
阅读全文
摘要:我们习惯是.h中放类的函数声明,在.cpp中放类的函数定义,但在类模板中不能这样做,如随手写了个demo测试了下.h中代码#pragma oncetemplate class CTemplate{public: CTemplate(void); ~CTemplate(void); void Fun(T a) ;}; .cpp中代码#include "StdAfx.h"#include "Template.h"templateCTemplate::CTemplate(void){}templateCTemplate::~CTemplate(void){}t
阅读全文
摘要:子窗口无效不会引起父窗口重绘,父窗口无效,如果父窗口收到WM_PAINT,则所有子窗口都会在父窗口处理WM_PAINT之后收到WM_PAINT重绘消息,当然,如果父窗口带有属性WS_CLIPCHILDREN,则不会引起子窗口重绘
阅读全文
摘要:当windows将输入焦点从一个窗口转换到另一个窗口时,它首先给正在失去焦点的窗口发一个WM_KILLFOCUS消息,wParam参数是接收输入焦点的窗口的句柄,然后window向正在接收输入焦点的窗口发送一个WM_SETFOCUS消息,同时wParam是还在失去输入焦点的窗口的句柄,(WPARAM为NULL表示没有窗口拥有或正在接收输入焦点)写个示例:父窗口可以阻止子窗口获得输入焦点. case WM_KILLFOCUS: Sethwnd = (HANDLE)wParam ; if (hwnd == GetParent((HWND)wParam)){ SetFocus(hwnd) ;}...
阅读全文
摘要:今天复习了下windows程序设计五第9章节,想到了个问题: case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, 24 * cxChar, cyCha...
阅读全文
摘要:在CSDN中看到的,非常浅显,摘记如下:侯捷在《深入浅出MFC》里有句话,暂且引用一下 勿在浮沙筑高台! 还有:山高月小,水落石出! 学习是一步一个脚印慢慢来! 线程的好处在于:你可以边上网边听MP3! 正因为线程的时间片(进程对于系统而言也是线程),线程之间的切换(时间片按毫秒计),才可以让你感觉同时可以做多个事情(虽然只有一个CPU),即任务间的频繁切换给人以快捷的感觉,如果听MP3就不可以做别的事了,那就没人用Windows了 举个例子,去商店买东西,你去的时候售货员正在跟另一个顾客说话,此时你过去了, 他转头问你:先生,你需要买什么吗? 你说:噢,我买XXX 他说:请稍后,我马上就好
阅读全文
摘要:自己敲敲读书笔记:加深下印像1:XML开始一定要写上版本号和编码,如,不然会一直报错。2:如果XML两个元素之间没有内容,用IE打开,显示会变化,如,用IE打开后,显示为 ,不懂,回头查查。(???)3:XML元素命名规则:个人感觉和VC命名相似,还是手动敲敲,加深印象: 3.1:可以包括字母数字和其他符号。 3.2:数字不能做开头,标点不能做开头。 3.3:元素的名称不能以XML(或者xml,xMl...)开头,尝试了下,用IE打开,XML做开头或整个做为一个元素,并不会报错,不懂,回头再查。(???) 3.4:不能包含空格,不能包含:。4:发现一个xml spy,回去研究下怎么用,网易学院
阅读全文
摘要:在日常中,我们经常需要用到辅助线程,那么在程序退出时一定要先保证辅助线程已安全退出,因为在程序销毁时很多资源也被销毁掉了,那么如果这时辅助线程要用到某些资源已不存在了,就可能发生不可预料的后果(一般是程序崩溃)。怎么让辅助线程安全退出呢?直接贴代码吧:成员变量/线程函数声明:HANDLE m_hThread;HANDLE m_hThreadEvent[2];static DWORD WINAPI Thread(LPVOID lpvoid); OnInitDialog中初始化: m_hThreadEvent[0] = CreateEvent(NULL, FA...
阅读全文
摘要:虚拟列表控件(CListCtrl)一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个问题:1是仅仅在ListCtrl中插入少量的数据,比如100个,然后通过[上一页][下一页]两个按钮进行控制,某一时刻显示的只是从xxx到xxx+100之间的记录。2是把所有数据全部插入到L
阅读全文