c++学习笔记(六)

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=  
   
  以上  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值