zoukankan      html  css  js  c++  java
  • 创建活动子窗口控件

    介绍 我遇到过许多关于“如何使对话框上的控件可移动”和“如何使一组控件在运行时可移动”的查询。这里有一个同样的尝试,以最简单的形式;然而,这可以根据需求进行建模。 背景 根据Windows预定义的行为,我们可以在运行时使用它们的标题/标题栏移动对话框/框架窗口。在某些情况下,您可能想要移动没有标题/标题栏的控件/一组控件。这里的示例代码解决了这个问题。 使用的代码 代码是使用Microsoft Visual Studio 6.0编写和编译的。 使用窗口的对话框布局编辑器将控件放置在对话框上。 您可以关联成员变量,根据您的要求,与这些控制: 隐藏,复制Code

    // MovableTrialDlg.h
    CStatic m_staticMovable;
    CEdit   m_editMovable;

    在类CMovableTrialDlg中定义其他成员变量。 隐藏,复制Code

    // MovableTrialDlg.h
    bool m_bMoving;

    请在代码中包含PreTranslateMessage()。 隐藏,复制Code

    // MovableTrialDlg.h
    virtual BOOL PreTranslateMessage(MSG* pMsg);

    PreTranslateMessage()为需要移动的控件执行所需的操作。 隐藏,复制Code

    BOOL CMovableTrialDlg::PreTranslateMessage(MSG* pMsg) 
    {
     // TODO: Add your specialized code here and/or call the base class
     if(pMsg->hwnd == m_editMovable.m_hWnd)
     {
      if(pMsg->message == WM_LBUTTONUP)
      {
       OnMovableStaticLButtonUp(pMsg);
      }
      if(pMsg->message == WM_LBUTTONDOWN)
      {
       OnMovableStaticLButtonDown(pMsg);
      }
      if(pMsg->message == WM_MOUSEMOVE)
      {
       OnMovableStaticMouseMove(pMsg);
      }
     }
     return CDialog::PreTranslateMessage(pMsg);
    }

    当鼠标移动和移动窗口的状态m_bMoving为真时,通过改变控件的窗口位置来执行移动。 隐藏,收缩,复制Code

    void CMovableTrialDlg::OnMovableStaticMouseMove(MSG* pMsg)
    {
     if(m_bMoving == false)
      return;
     WINDOWPLACEMENT wp;
     ::GetWindowPlacement(m_editMovable.m_hWnd, &wp);
     int nXDiff = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
     int nYDiff = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
     POINT pt = pMsg->pt;
     ScreenToClient(&pt);
     wp.rcNormalPosition.left  = pt.x - 5;
     wp.rcNormalPosition.top   = pt.y - 5;
     wp.rcNormalPosition.right = wp.rcNormalPosition.left + nXDiff;
     wp.rcNormalPosition.bottom= wp.rcNormalPosition.top + nYDiff;
     ::SetWindowPlacement(m_editMovable.m_hWnd, &wp);
     ::GetWindowPlacement(m_staticMovable.m_hWnd, &wp);
     nXDiff = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
     nYDiff = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
     pt = pMsg->pt;
     ScreenToClient(&pt);
     wp.rcNormalPosition.left  = pt.x - 5;
     wp.rcNormalPosition.top   = pt.y - nYDiff - 5;
     wp.rcNormalPosition.right = wp.rcNormalPosition.left + nXDiff;
     wp.rcNormalPosition.bottom= wp.rcNormalPosition.top + nYDiff;
     ::SetWindowPlacement(m_staticMovable.m_hWnd, &wp);
     m_editMovable.Invalidate();
     m_staticMovable.Invalidate();
    }

    一旦鼠标左键按下事件发生在编辑控件上,设置移动状态,m_bMoving,为真。 隐藏,复制Code

    void CMovableTrialDlg::OnMovableStaticLButtonDown(MSG* pMsg)
    {
     m_bMoving = true;
    }

    类似地,当鼠标左键向上时,改变移动状态m_bMoving为false。 隐藏,复制Code

    void CMovableTrialDlg::OnMovableStaticLButtonUp(MSG* pMsg)
    {
     m_bMoving = false;
    }

    历史 我将提供代码,使这组控件看起来像一个带有非mdi框架/对话框的子容器,并且可以使用标题/标题栏移动。将模拟标题/标题栏。 本文转载于:http://www.diyabc.com/frontweb/news11253.html

  • 相关阅读:
    hdu 1017 A Mathematical Curiosity 解题报告
    hdu 2069 Coin Change 解题报告
    hut 1574 组合问题 解题报告
    hdu 2111 Saving HDU 解题报
    hut 1054 Jesse's Code 解题报告
    hdu1131 Count the Trees解题报告
    hdu 2159 FATE 解题报告
    hdu 1879 继续畅通工程 解题报告
    oracle的系统和对象权限
    oracle 自定义函数 返回一个表类型
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473328.html
Copyright © 2011-2022 走看看