- 浏览: 73408 次
- 性别:
- 来自: 上海
文章分类
最新评论
GetMessagePos GetCursorPos的区别
The GetMessagePos function retrieves the cursor position for the last message retrieved by the GetMessage function.
The GetCursorPos function retrieves the cursor's position, in screen coordinates.
可以看出上面的明显不同,就是GetMessagePos 的鼠标位置是从消息队列当中拿的,而GetCursorPos是直接取的。
LOWORD, HIWORD 与 GET_X_PARAM, GET_Y_PARAM 的区别
LOWORD, HIWORD 与 GET_X_PARAM, GET_Y_PARAM 的区别
今天写一个拖放功能时,遇到了很奇怪的问题. 拖放只能拖放到原始窗口的正方向,即右下. 而往左上拖放始终不行,思量再三,发现是自己使用的HIWORD, LOWORD 的问题.
#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
typedef unsigned short WORD ;
一看便知, LOWORD , HIWORD 存在着丢失负值的现象.
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
这两个宏在使用HIWORD, LOWORD 的同时, 进行了数值类型转换,重而保证了数值的正确.
得出的教训是: 处理诸如WM_LBUTTONDOWN , WM_LBUTTONUP 这类消息时, 切忌不要使用LOWORD, HIWORD 这种宏,
鼠标的位置是可正可负的.
今天写一个拖放功能时,遇到了很奇怪的问题. 拖放只能拖放到原始窗口的正方向,即右下. 而往左上拖放始终不行,思量再三,发现是自己使用的HIWORD, LOWORD 的问题.
#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
typedef unsigned short WORD ;
一看便知, LOWORD , HIWORD 存在着丢失负值的现象.
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
这两个宏在使用HIWORD, LOWORD 的同时, 进行了数值类型转换,重而保证了数值的正确.
得出的教训是: 处理诸如WM_LBUTTONDOWN , WM_LBUTTONUP 这类消息时, 切忌不要使用LOWORD, HIWORD 这种宏,
鼠标的位置是可正可负的.
Cardinal 是 4 字节无符号的整型, 先看一个例数:
Cardinal 例数: | 4277991664
按字节划分: | 第四字节 第三字节 第二字节 第一字节
二进制: | 11111110 11111100 11111000 11110000
十六进制: | FE FC F8 F0
十进制: | 254 252 248 240
按双字节划分: | 高两位 低两位
二进制: | 1111111011111100 1111100011110000
十六进制: | FEFC F8F0
十进制: | 65276 63728
//可以用 Lo 函数提取它的低字节(也就是第一个字节) const c: Cardinal = 4277991664; begin ShowMessageFmt('%d', [Lo(c)]); {240} end;
//其实不使用 Lo 函数, 通过 Byte 类型转换也可以获取第一个字节 const c: Cardinal = 4277991664; begin ShowMessageFmt('%d', [Byte(c)]); {240} end;
//Hi 函数说是获取高位字节, 其实是获取第二个字节 const c: Cardinal = 4277991664; begin ShowMessageFmt('%d', [Hi(c)]); {248} end;
//如果要获取低两位, 貌似应该有个 LoWord 函数; 确实有, 但它不是函数, 只是 Word 类型的一个别称. const c: Cardinal = 4277991664; begin ShowMessageFmt('%d', [LoWord(c)]); {63728} ShowMessageFmt('%d', [Word(c)]); {63728} end;
//HiWord 函数是提取高两位的 const c: Cardinal = 4277991664; begin ShowMessageFmt('%d', [HiWord(c)]); {65276} end;
说说 LoWord 和 HiWord 的用途:
譬如在一个鼠标消息的消息参数 lParam 中存放着鼠标位置. lParam 是 4 字节的, 它的低两位存放 x、高两位存放 y
pt.X := LoWord(lParam); {lParam 中的低两位是 x 坐标}
pt.Y := HiWord(lParam); {lParam 中的高两位是 y 坐标}
pt.Y := HiWord(lParam); {lParam 中的高两位是 y 坐标}
BYTE、WORD与DWORD类型
在Visual C++ 6.0中,BYTE与WORD,DWORD本质上都是一种无符号整型,它们在WINDEF.H中被定义,定义如下:
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned long DWORD;
也就是说BYTE是无符号的char型(char型本质上也是一种1个字节的整型),WORD是无符号short型,DWORD是无符号long型。
而在Visual C++ 6.0中,char型长度为1字节,short型长度为2字节,int和long型长度都为4字节,因此可以认为BYTE与WORD,DWORD定义的变量分别获得了1字节,2字节,4字节内存,正与BYTE与WORD,DWORD的字面意义相符。
即:BYTE=unsigned char(完全等同)
WORD=unsigned short(完全等同)
DWORD=unsigned long(完全等同)
GetFirstDocTemplatePosition和GetNextDocTemplate
GetFirstDocTemplatePosition
取出第一个文档模板的位置。
POSITION GetFirstDocTemplatePosition( ) const;
返回值: 一个POSITION值,能被用于克隆或修改对象指针;如果列表是空的则为NULL。
备注:
获得应用程序中的首席文档模板的位置。由调用GetNextDocTemplate返回的 POSITION值来
得到首席CDocTemplate对象。
得到首席CDocTemplate对象。
29、GetNextDocTemplate
取出文档模板位置,能被递归使用。
CWinApp::GetNextDocTemplate
CDocTemplate* GetNextDocTemplate( POSITION& pos ) const;
返回值: 指向CDocTemplate对象的指针。
参数:
pos 前面调用GetNextDocTemplate or GetFirstDocTemplatePosition返回的POSITION值的
索引。该值在这次调用中被更新为下一个位置。
索引。该值在这次调用中被更新为下一个位置。
备注:
获得由pos鉴定的文档模板,然后将pos设置为POSITION值。如果你用GetFirstDocTemplat
ePosition来设定最初位置,你可以用GetNextDocTemplate循环向前。
ePosition来设定最初位置,你可以用GetNextDocTemplate循环向前。
你必须确保你的POSITION值是有效的。如果它无效,则只能用MFC类库的调试版。
如果取出的文档模板是最后一个有效值,则pos的新值被设为NULL。
例子:
POSITION po = AfxGetApp()->m_pDocManager->GetFirstDocTemplatePosition();
((CDocTemplate*)(AfxGetApp()->m_pDocManager->GetNextDocTemplate(po)))->OpenDocumentFile(NULL);//获取第一个documentTemplate
((CDocTemplate*)(AfxGetApp()->m_pDocManager->GetNextDocTemplate(po)))->OpenDocumentFile(NULL);//获取第一个documentTemplate
发表评论
-
自己写的一段customerDraw
2010-08-24 16:20 1892void CNewReportPage::OnNMCustom ... -
帖BitMap
2010-08-24 09:42 789void CEx_14View::O ... -
clistctrl +号按钮绘制
2010-08-11 17:18 1579网上有关clistctrl举不胜举,包括按钮控件的绘 ... -
listctrl总结2
2010-08-11 17:11 98920. listctrl的subitem添加图标 ... -
VC中使用ListCtrl经验总结(1)
2010-08-11 17:07 1326ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用 ... -
LV_COLUMN结构体
2010-08-10 14:44 2707typedef struct _LV_COLUMN {UINT ... -
加载位图BITMAP
2010-08-10 14:27 1455m_Bitmap.LoadBitmap(IDB_BITMAP1 ... -
关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别
2010-08-10 13:15 6448而OnPaint()是CWnd的类成员,同时负责响应WM_ ... -
listctrl 重绘
2010-08-10 10:15 1052common control 4.7版本介绍 ... -
OnCreate PreCreateWindow PreSubclassWindow
2010-08-09 17:47 1776OnCreate PreCreateWindow PreSub ... -
扩展CListCtrl实现颜色长度改变
2010-08-09 17:34 3223用CListCtrl来显示数据比较方便,有时候我们需要标注某一 ... -
创建CListCtrl中的排序小图标
2010-08-09 17:11 2317创建CListCtrl中的排序小图标 for(int i = ... -
CListCtrl控件的使用
2010-08-09 17:02 1203初始化: DWORD dwStyle; dwStyle = m ... -
改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景
2010-08-09 16:49 2680改变 CListCtrl、CHeaderCtrl 高度、字体、 ... -
CHeaderCtrl用法
2010-08-09 15:47 4256CListCtrl的表头可以单独 ... -
CListCtrl::SortItems的用法:
2010-08-09 12:37 2008CListCtrl::SortItems的用法: (一)So ... -
树型视的三个结构TVINSERTSTRUCT、TVITEM、NMTREEVIEW
2010-08-05 18:11 992TVINSERTSTRUCT包含添加新项到树形视控件所使用的信 ... -
剪贴板和OLE拖放
2010-08-05 16:35 1153一、传统剪贴板 ... -
文档/视图结构中的各个部分是如何联系到一起的
2010-08-05 15:39 759文档/视图结构是MFC中最有特色而又有难度的部分,在这当中涉及 ... -
LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义
2010-08-05 13:33 1033UNICODE:它是用两个字节 ...
相关推荐
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)库来实现三角函数的绘制。MFC是微软提供的一套C++类库,用于构建Windows应用程序,它封装了Windows API,使得编程更加方便。本项目的核心是...
关于MFC一些函数的使用方法,大家看一看,是关于c++的一些事
基于MFC编写一个单文档程序,在客户区用图形来展现各种数学函数曲线。 具体要求: 1)可绘制常见的数学函数曲线,如三角函数、指数函数、幂函数等。 2)通过菜单选择不同的函数曲线类型,可以通过对话框指定该函数的...
MFC 图形函数大全中的一些重要概念包括: 1. 映射模式(Map Mode):映射模式定义了图形和文本绘制函数将逻辑单位转换为设备单位所使用的度量单位和坐标方向。在 MFC 中,映射模式可以是 MM_TEXT、MM_LOMETRIC、MM_...
**MFC函数速查工具详解** MFC(Microsoft Foundation Classes)是微软开发的一个C++类库,它基于面向对象编程,用于简化Windows应用程序的开发。MFC提供了许多封装的Windows API函数,使得开发者可以更方便地操作...
MFC对话框函数集 MFC(Microsoft Foundation Classes)提供了一组对话框函数,用于创建和管理对话框。对话框是应用程序创建的一个临时窗口,用于获取用户的输入。应用程序通常使用对话框向用户显示一些命令提示信息...
总的来说,这份"MFC主要函数和类大全"资源是学习和查询MFC的重要参考资料,它能帮助开发者快速掌握MFC的基本概念、类库结构以及关键函数的使用,从而提高Windows应用开发的效率和质量。对于想要深入理解和使用MFC的...
MFC函数库手册是程序员的重要参考资料,它包含了关于MFC类库的详细信息,包括类的定义、成员函数的用法以及参数说明等。 `.chm`文件是Microsoft编写的HTML帮助文件,通常用于存放电子文档,具有搜索和索引功能,...
在Microsoft Foundation Classes (MFC) 中,回调函数是一种特殊类型的函数,它允许用户代码与库或操作系统进行交互,尤其是在处理异步事件时。回调函数通常作为参数传递给其他函数,以便在特定事件发生时调用。在MFC...
在Microsoft Foundation Classes (MFC)库中,全局函数是一些可以在任何类或对象中调用的函数,它们不属于任何特定的类。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,使得开发者可以更...
MFC 图形界面函数 MFC 图形界面函数是 MFC 框架中的一部分,用于创建和管理图形用户界面。这些函数提供了常用的界面控件和功能,使得开发者可以快速创建复杂的图形界面。 1.CButton::Create 函数 CButton::Create...
MFC函数库手册是学习和使用MFC进行Windows编程的重要参考资料。 PDF和CHM手册是两种常见的文档格式,PDF(Portable Document Format)以可移植的方式保存文档,保持了原始布局,方便打印和阅读;CHM(Compiled ...
MFC函数库手册是开发人员的重要参考资料,它包含了MFC中的各类成员函数、类以及相关概念的详细说明,便于快速查找和理解MFC的功能和用法。 在MFC中,核心组件主要包括: 1. **类库**:MFC提供了大量的类,这些类...
### VC++ MFC中的定时器函数与窗口刷新 在Windows编程环境下,特别是在使用Microsoft Foundation Classes (MFC)进行开发时,定时器是一个非常实用的功能。本文将深入探讨如何使用`SetTimer`函数来创建定时器,并...
对于一些特定的MFC类,例如`CRect`和`CPoint`,它们也提供了与几何形状相关的数学操作,如面积计算、距离测量等。 在实际编程中,理解并熟练运用这些数学函数能帮助开发者编写出高效、准确的代码。例如,游戏开发中...
下面,我们将深入探讨一些关键的MFC函数和概念。 1. **CWinApp**: 这是MFC中的应用程序类,每个MFC程序都会有一个CWinApp实例。它管理应用程序的启动、初始化和退出过程,并提供全局访问点。CWinApp的`InitInstance...
MFC函数库操作手册是程序员在使用MFC进行Windows编程时的重要参考资料,它详细阐述了各个类和函数的功能、用法以及注意事项。 MFC库的核心是它对Windows API的封装,主要包含以下几个关键部分: 1. **应用框架...
**MFC(Microsoft Foundation Class)函数...总之,196392MFC函数实用手册是MFC开发者的必备参考资料,它涵盖了从基础到高级的MFC函数使用,结合实际代码示例和额外的学习资源,可以帮助开发者快速提升MFC编程技能。
《深入理解MFC常用函数:DefWindowProc、PostQuitMessage与BeginPaint》 在Windows编程领域,Microsoft Foundation Class (MFC)库是一个重要的工具,它为开发者提供了构建基于Windows的应用程序的C++类库。本文将...