c++学习笔记(六)
2008-12-25 14:40
766 查看
1、 VC限制窗口大小又一法
一般说见到的方法,,都是截获WM_GETMAXMININFO消息。
俺有另一经验可实现之。
由于一般窗口大小的改变,都是用户拖动窗口边框而造成的。所以,我们可以截获主窗口消息WM_NCHITTEST在其响应函数中判断CWnd::OnNcHitTest()的返回值是否为HTRIGHT,HTLEFT,HTTOP,HTBOTTOM四个值之一,如果是,说明用户此时已点击了四个边框之一,此时我们应该返回HTCLIENT.那么,鼠标的形状就不会变成水平或垂直的双向箭头,用户就不可能依靠拖动边框来改变窗口大小了。
另外,还应补上一个小漏洞,就是还要把系统菜单中的SC_SIZE去掉。
2
当菜单项有了自画风格时,windows(菜单的窗口函数)会发送wm_measureitem给该菜单所属窗口,以便得到该菜单项的长度和高度,然后会发送wm_drawitem给该菜单所属窗口,其中包括了DC,菜单的各种状态,你这时就可以为这个菜单项画上你想要的画面了...
OnMeasureItem是响应子控件的WM_MEASUREITEM消息的,MeasureItem是响应反射的自己发送的WM_MEASUREITEM消息的。
3、 FAR,NEAR或far,near是DOS,16位Win时代的修饰符。
那时内存地址是以实模式方式分段组织的。
可寻址的范围是2^20=1024K=1M
又因为是16位的寄存器所以一个段为2^16=64K
当程序要访问段内地址时默认就是NEAR/near方式。
寻址时仅仅包含段偏移就可以了。
而要访问其他段的地址时,就需要加FAR/far修饰符。
这时,寻址时不但要求段偏移还要有段基址信息。
而32位Windows与16位Windows的重要区别就是指针宽度均为32位,
不再有near和far区别,内存模式也不是基于分段模式。
所以在32位Windows程序中,对FAR,NEAR或far,near已经不区别了。
所以可以忽略它。
WINDEF.H头文件中已经将FAR,NEAR或far,near定义为空字符。
//
...
#undef far
#undef near
#define far
#define near
//
...
#undef FAR
#undef NEAR
#define FAR far
#define NEAR near
如果没有包含WINDEF.H头文件也可以设置编译选项。
/D_near= /D_far= /D__near= /D__far=
以上
一般说见到的方法,,都是截获WM_GETMAXMININFO消息。
俺有另一经验可实现之。
由于一般窗口大小的改变,都是用户拖动窗口边框而造成的。所以,我们可以截获主窗口消息WM_NCHITTEST在其响应函数中判断CWnd::OnNcHitTest()的返回值是否为HTRIGHT,HTLEFT,HTTOP,HTBOTTOM四个值之一,如果是,说明用户此时已点击了四个边框之一,此时我们应该返回HTCLIENT.那么,鼠标的形状就不会变成水平或垂直的双向箭头,用户就不可能依靠拖动边框来改变窗口大小了。
另外,还应补上一个小漏洞,就是还要把系统菜单中的SC_SIZE去掉。
2
当菜单项有了自画风格时,windows(菜单的窗口函数)会发送wm_measureitem给该菜单所属窗口,以便得到该菜单项的长度和高度,然后会发送wm_drawitem给该菜单所属窗口,其中包括了DC,菜单的各种状态,你这时就可以为这个菜单项画上你想要的画面了...
OnMeasureItem是响应子控件的WM_MEASUREITEM消息的,MeasureItem是响应反射的自己发送的WM_MEASUREITEM消息的。
3、 FAR,NEAR或far,near是DOS,16位Win时代的修饰符。
那时内存地址是以实模式方式分段组织的。
可寻址的范围是2^20=1024K=1M
又因为是16位的寄存器所以一个段为2^16=64K
当程序要访问段内地址时默认就是NEAR/near方式。
寻址时仅仅包含段偏移就可以了。
而要访问其他段的地址时,就需要加FAR/far修饰符。
这时,寻址时不但要求段偏移还要有段基址信息。
而32位Windows与16位Windows的重要区别就是指针宽度均为32位,
不再有near和far区别,内存模式也不是基于分段模式。
所以在32位Windows程序中,对FAR,NEAR或far,near已经不区别了。
所以可以忽略它。
WINDEF.H头文件中已经将FAR,NEAR或far,near定义为空字符。
//
...
#undef far
#undef near
#define far
#define near
//
...
#undef FAR
#undef NEAR
#define FAR far
#define NEAR near
如果没有包含WINDEF.H头文件也可以设置编译选项。
/D_near= /D_far= /D__near= /D__far=
以上
相关文章推荐
- c++学习笔记(5):C++ typename的起源与用法
- C++学习笔记 lesson7 static
- C++ Primer Plus (第6版)笔记心的---开始学习C++
- C++学习笔记--初始化列表
- C++学习笔记4
- 智能指针auto_prt的使用(c++学习笔记)
- 【C++】【学习笔记】向自定类中添加 combine 和 isbn 成员
- C++学习笔记_two_day
- 【菜鸟C++学习笔记】23. 对象的传递机制
- C++学习笔记_three_day
- C++学习笔记(四)--指针(4)
- 【C++学习笔记】结构简介
- C++学习笔记(三)补充篇 计算机网络基础 — 参考慕课网
- 2010年C++学习笔记之一:类
- C++学习笔记-----operator=函数处理自赋值
- c++学习笔记1
- C++学习笔记60——模板编译模型
- C++primer第五版【学习笔记】——第一章
- 手机软件兼容之桥接模式学习笔记[C++版]
- C++学习笔记3:内存模型和名称空间