你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
建立磁性窗体(2)
 
 typedef struct _WINDOWPOS {
    HWND hwnd; // 窗口句炳
    HWND hwndInsertAfter; // 窗口的Z顺序
    int x; // 窗口x坐标
    int y; // 窗口的y坐标
    int cx; // 窗口的宽度
    int cy; // 窗口的高度
    UINT flags; // 标志位,根据它设定窗口的位置
   } WINDOWPOS;

  可以看出,WM_WINDOWPOSCHANGED消息不仅仅在窗口移动时产生,而且在它的Z顺序发生变化时也会产生,包括窗口的显示和隐藏。所以我认为这个消息不是最佳选择。

  WM_MOVING和WM_MOVE消息的参数lParam是一个RECT结构指针,与WM_WINDOWPOSCHANGED消息相比较为单纯,我采用的即是这个消息。下面我给出用C++ Builder写的示例程序。

  为了方便程序的阅读,先定义了一个枚举数据类型,表示窗体的粘贴状态。同时定义了一个类,封装了窗体粘贴相关的数据,其中的Enable是为了防止重复进行操作,方法是操作时设置Enable为否,操作结束时恢复为真,而在操作前检查这个标志是否为否,否则直接返回。

  图2 窗体的粘贴状态示例

  // 窗体粘贴状态,含义见图2
   enum enumAttachStyle
   {
    AS_NONE, // 没有粘贴
    AS_TOP,
    AS_BOTTOM,
    AS_T_TOP,
    AS_LEFT,
    AS_RIGHT,
    AS_L_LEFT
   };
   // 处理窗体粘贴的类,为了简化,采用了public声明
   class CFormAttachStyle
   {
    public:
    bool Enabled; // 防止重复进行粘贴相关的操作
    HWND AttachTo; // 被粘贴到哪个窗口
    int XStyle; // 左右方向的粘贴状态
    int YStyle; // 上下方向的粘贴状态
    int xPos; // 粘贴到的x坐标
    int yPos; // 粘贴到的y坐标
    CFormAttachStyle() // 初使化数据
    {
      XStyle =AS_NONE;
      YStyle =AS_NONE;
      Enabled=true;
      hAttachTo=NULL;
    }
   };

(编辑:aniston)

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089