您的位置:首页 > 编程语言 > C语言/C++

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=

以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: