- 浏览: 113747 次
- 性别:
- 来自: 北京
最新评论
文章列表
孙鑫VC++讲座笔记-(4)MFC消息映射机制的剖析
一,消息映射机制
1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)
1)在头文件(DrawView.h)中声明消息响应函数原型。
//{{AFX_MSG(CDrawView) //注释宏
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG //注释宏
说明:
在注释宏之间的声明在VC中灰色显示。afx_msg宏表示声明的是一个消息响应函数。
2)在源文件(DrawView.cpp)中进行消息映射。
...
- 2012-06-15 10:59
- 浏览 257
- 评论(0)
以下为具体的实现方法:
加入一个新类,类名:CMyButton,基类:CButton。
在头文件 MyButton.h 中加入以下变量和函数定义:
private:
int m_Style;//按钮形状(0-正常,1-当前,2-按下,3-锁定)
BOOL b_InRect;//鼠标进入标志
CString m_strText;//按钮文字
COLORREF m_ForeColor;//文本颜色
COLORREF m_BackColor;//背景色
COLORREF m_LockForeColor;//锁定按钮的文字颜色
CRect m_ButRect; ...
- 2012-06-15 10:43
- 浏览 303
- 评论(0)
hWnd=GetWindow(hDlg,GW_CHILD);
if(hWnd == NULL || !::IsWindow(hWnd))
return FALSE;
nIdFirst=GetDlgCtrlID(hWnd);
do
{
GetClassName(hWnd,szBuf,256);
//Edit子类化
if( _tcsicmp(szBuf,_T( "Edit ")) == 0)
{
//验证是否已经被永久映射
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CEditEx * ...
- 2012-06-14 19:01
- 浏览 336
- 评论(0)
源代码下载
一、简介
有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示:
为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理。如下是几个主要的非客户区消息:
WM_NCHITTEST
WM_NCACTIVATE
WM_NCPAINT二、使用
2.1 首先我们需要引用两个类的头文件
#include"NCButtonManager.h"
#include "NCButton.h" ...
- 2012-06-12 12:57
- 浏览 327
- 评论(0)
转自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1652126
Afx全局函数及MFC常见数据类型AfxBeginThread:开始一个新的线程
AfxEndThread:结束一个旧的线程
AfxFormatString1:类似printf一般地将字符串格式化
AfxFormatString2:类似printf一般地将字符 ...
- 2012-06-12 10:30
- 浏览 377
- 评论(0)
subclassdlgitem
该函数用来子类化一个控件.
Subclass(子类化)是MFC中最常用的窗体技术之一。子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类)。另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息。
SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为
BOOL SubclassDlgI ...
- 2012-06-10 10:14
- 浏览 442
- 评论(0)
1.如何将对话框客户区的背景设成透明的?
crybird (寒号鸟)
http://expert.csdn.net/Expert/topic/2172/2172079.xml
描述:如题。客户区的背景能设成透明的么?如果有时间,非客户区的隐藏也讲讲啦!
回复人: bcpl(我是宇宙中的一粒沙子)
BOOL CALLBACK EnumChildFunc(HWND hwnd, LPARAM lParam)
{
CRgn *pRgn = (CRgn*)lParam;
CRect rcChild;
::GetWindowRect(hwnd, rcChild);
CR ...
- 2012-06-09 10:51
- 浏览 426
- 评论(0)
void CSkinAndLangDlg::OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam)
{
HDC WindowDC = ::GetWindowDC(m_hWnd);
// //取得整个窗体矩形
RECT WindowRect;
GetWindowRect(&WindowRect);
OffsetRect(&WindowRect, -WindowRect.left, - WindowRect.top);
// //取得客户区矩形,并从WINDOWDC中排除不予绘制
// RECT ClientR ...
- 2012-06-09 09:52
- 浏览 453
- 评论(0)
LANGID langid = GetSystemDefaultLangID();
//例如:2052
langid = GetUserDefaultLangID();
//例如:2052
CString msgFile;
msgFile.Format(_T("%04xl"),langid);
//例如:0804
TCHAR name[4*1024]={0};
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SNATIVELANGNAME,
name, sizeof(name)/sizeof(TCHAR));
// ...
- 2012-06-08 14:31
- 浏览 399
- 评论(0)
Windows API中有一个函数GetLocaleInfo可以用来获得系统信息比如系统语言, 货币符号等
代码如下:
function TForm1.GetLocaleInformation(Flag: Integer): String;
var
pcLCA: Array[0..20] of Char;
begin
if( GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,Flag,pcLCA,19) <= 0 ) then begin
pcLCA[0] := #0;
end;
...
- 2012-06-08 14:25
- 浏览 260
- 评论(0)
文章来源:http://blog.csdn.net/yingzheng1983/article/details/3135858
WM_NCHITTEST
当光标移动到窗体,或鼠标按下,释放时,发送WM_NCHITTEST消息,如何鼠标不被捕获,消息在窗体得到光标之后发出,否则,消息发送到捕获到鼠标的窗体。
WM_NCHITTEST
xPos = LOWORD(lParam); // 光标的水平位置(X)
yPos = HIWORD(lParam); //光标的垂直位置(Y)
Parameters(参数)
xPos
lParam的低次序数值(X的数值)。指定鼠标指针的 ...
- 2012-06-08 10:36
- 浏览 290
- 评论(0)
想修改窗体的非客户区,首先就得明白为什么要修改非客户区,什么是非客户区
从窗体或控件来看,非客户区就是无法放置控件的区域,比如窗体的标题栏,和边框,菜单栏也是非客户区,菜单栏不是控件是画上去的
文本框的边框,滚动条区域都是非客户区
为什么要修改非客户区呢??
原因是为了自绘,让边框好看一些,比如要加高窗体标题栏,就需要改非客户区,自绘非客户区会响应 WM_NCPAINT消息
在这个消息里,你可以进行窗体,控件,非客户区的自绘
好啦,现在转入正题,要修改非客户大小,必须处理 WM_NCCALCSIZE
有关于 WM_NCCALCSIZE 消息,可以去www.panshsoft ...
- 2012-06-08 10:28
- 浏览 347
- 评论(0)
纯资源 DLL是仅包含资源(图标,位图,字符串,声音,视频,对话框等)的
DLL。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,使用纯资 ...
- 2012-06-07 13:49
- 浏览 264
- 评论(0)
以下的代码在EXE中,执行无误。可是在DLL中FindResource返回的值就为0了,我用::GetLastError(),得出的值是1813,也就是取不到资源,这是为什么?
BOOL ExtractFile(char *szZlibFile,DWORD dwRID)
{
HANDLE hFile = NULL ;
HRSRC hRsrc = NULL ;
HGLOBAL hGlobal = NULL ;
DWORD dwResSize = 0, dwBytesWrite = 0, dwBytesRead = 0;
PVOID pRsrc = NULL, pConf ...
- 2012-06-07 13:34
- 浏览 360
- 评论(0)
MFC 正规DLL
2.5 MFC 正规DLL ——CWinApp 派生类
当用 AppWizard 产生正规 DLL 时, DllMain 函数将出现在框架内,并且我们会得到一个 CWinApp 的派生类 ( 和一个该类的全局对象 ) ,就像 EXE 程序的情形一样。我们可以通过重载 CWinApp::InitInstance 和 CWinApp::ExitInstance 函数获得控制。然而大多数情况下,我们不用重载这两函数。我们只要编写 C 函数,然后用 __declspec(dllexport) 修饰符导出这些函数 ( 或者在工程的 DEF 文件里加入函数入口 ) 即可。
...
- 2012-06-06 16:03
- 浏览 351
- 评论(0)