zoukankan      html  css  js  c++  java
  • 工序打扎流程(自定义按钮移动、群响应。)

    代码
    一、自定义按钮RFMSStepButton :
    //////////////RFMSStepButton.h

    #pragma once
    class RFMSStepButton : public CButton
    {
    DECLARE_DYNAMIC(RFMSStepButton)

    public:
    RFMSStepButton();
    virtual ~RFMSStepButton();

    protected:
    DECLARE_MESSAGE_MAP()
    public:
    afx_msg
    void OnLButtonDown(UINT nFlags, CPoint point);
    public:
    afx_msg
    void OnLButtonUp(UINT nFlags, CPoint point);
    public:
    afx_msg
    void OnMouseMove(UINT nFlags, CPoint point);
    public:
    bool m_bStartMove;
    public:
    afx_msg
    void OnLButtonDblClk(UINT nFlags, CPoint point);
    public:
    CPoint m_oldpoint;
    };


    /////////////////RFMSStepButton.cpp
    #include "stdafx.h"
    #include
    "ButtonTest.h"
    #include
    "RFMSStepButton.h"
    #include
    "MyDialog.h"

    // RFMSStepButton

    IMPLEMENT_DYNAMIC(RFMSStepButton, CButton)

    RFMSStepButton::RFMSStepButton()
    : m_bStartMove(
    false)
    , m_oldpoint(
    0)
    {

    }

    RFMSStepButton::
    ~RFMSStepButton()
    {
    }


    BEGIN_MESSAGE_MAP(RFMSStepButton, CButton)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONDBLCLK()
    END_MESSAGE_MAP()



    // RFMSStepButton 消息处理程序


    void RFMSStepButton::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_bStartMove = TRUE;
    m_oldpoint
    = point;
    ClientToScreen(
    &m_oldpoint);
    CButton::OnLButtonDown(nFlags, point);
    }

    void RFMSStepButton::OnLButtonUp(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_bStartMove = FALSE;
    CButton::OnLButtonUp(nFlags, point);;
    }

    void RFMSStepButton::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (m_bStartMove)
    {
    /*
    此方法优点,代码简单,但有个问题没解决,就是鼠标在其他地方按下左键,拖动到按钮上去后,按钮就又会移动了。
    ReleaseCapture();
    SendMessage(WM_NCLBUTTONDOWN, (WPARAM)HTCAPTION, 0);
    */

    CRect rect;
    GetClientRect(
    &rect);
    ClientToScreen(
    &rect);
    GetParent()
    ->ScreenToClient(&rect);
    ClientToScreen(
    &point);

    SetWindowPos(NULL,rect.left
    + point.x - m_oldpoint.x ,
    rect.top
    + point.y - m_oldpoint.y ,0, 0, SWP_NOZORDER|SWP_NOSIZE);
    m_oldpoint
    = point;

    Invalidate();

    }
    CButton::OnMouseMove(nFlags, point);
    }

    void RFMSStepButton::OnLButtonDblClk(UINT nFlags, CPoint point)
    {
    // 重载按钮双击事件。
    MyDialog dialog;
    dialog.DoModal();
    CButton::OnLButtonDblClk(nFlags, point);
    }

    /*
    备注:响应函数要用WM_CLICK之类的,而不能用=BN_CLICKED=之类的。
    */


    二、调用处及群响应:

    // ButtonTestDlg.cpp : 实现文件

    #define ID1 120
    #define ID2 140

    BEGIN_MESSAGE_MAP(CButtonTestDlg, CDialog)
    ON_COMMAND_RANGE(ID1,ID2, OnMyButton)
    // 从ID1到ID2的所有控件都响应OnMyButton函数
    END_MESSAGE_MAP()

    BOOL CButtonTestDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    RFMSStepButton
    * button11 = new RFMSStepButton;
    CRect rect1(
    200,0,300,100);
    button11
    ->Create(L"124", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect1, this, 124 );

    RFMSStepButton
    * button12 = new RFMSStepButton;
    CRect rect3(
    200,200,300,300);
    button12
    ->Create(L"125", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect3, this, 125 );

    return TRUE;
    }


    void CButtonTestDlg::OnMyButton(UINT nID)
    {
    //MessageBox(L"this");
    }
  • 相关阅读:
    【渗透攻防】深入了解Windows
    浅析B/S架构数据库连接方式
    剖析泄露你银行卡密码的钓鱼网站:真假“10086”
    红黑树的删除和加入节点
    Unity里包裹Debug,且不影响Debug的重定向
    Java向上转型和向下转型(附具体样例)
    Javascript 方法apply和call的差别
    普通androidproject转换为C/C++project之后,再还原成androidproject的解决方式
    初识双网卡
    js面向对象编程: js类定义函数时prototype和this差别?
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1623711.html
Copyright © 2011-2022 走看看