模拟自己设计的窗口上面的客户部分鼠标点击可以实现移动
这部分是MFC的对话框中Border选中None
将对话框的上面一部分设定为客户区,采用下面代码模拟客户区
首先在对话框的类向导中添加事件:MouseMove()、activite()、LButtonDown()、LButtonUp()
在头文件中添加
//添加了两个成员变量,一个用来标记移动状态,一个用来记录鼠标按下时的坐标
CPoint m_point;
BOOL m_bIsMoving;
void CDfuCtrlServiceToolDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_bIsMoving)
{
//偏移量
//int dx = point.x - m_point.x;
//int dy = point.y - m_point.y;
////如果窗口闪烁,可以使dx,dy大于1再移动
////if(abs(dx)>2||abs(dy)>2)....
//CRect rect = { 0 };
//GetWindowRect(&rect);
//OffsetRect(&rect, dx, dy);//整个窗口偏移dx,dy
//MoveWindow(&rect);//移动窗口
if (m_point.x<700&& m_point.x>0&& m_point.y>0&& m_point.y<45)//这部分指定了鼠标所点击的位置后发生移动,如果不需要,只采用上面的即可。
{
int dx = point.x - m_point.x;
int dy = point.y - m_point.y;
//如果窗口闪烁,可以使dx,dy大于1再移动
//if(abs(dx)>2||abs(dy)>2)....
CRect rect = { 0 };
GetWindowRect(&rect);
OffsetRect(&rect, dx, dy);//整个窗口偏移dx,dy
MoveWindow(&rect);//移动窗口
}
else
{
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
void CDfuCtrlServiceToolDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialogEx::OnActivate(nState, pWndOther, bMinimized);
if (nState == WA_INACTIVE && m_bIsMoving)
{
m_bIsMoving = FALSE;
ReleaseCapture();
}
// TODO: 在此处添加消息处理程序代码
}
void CDfuCtrlServiceToolDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bIsMoving = TRUE;
SetCapture();//捕获鼠标消息,就算鼠标超过窗口也可以捕获到
m_point = point;//记录按下时的坐标
CDialogEx::OnLButtonDown(nFlags, point);
}
还有一个
void CDfuCtrlServiceToolDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_bIsMoving)
{
m_bIsMoving = FALSE;
ReleaseCapture();
}
CDialogEx::OnLButtonUp(nFlags, point);
}
1、MFC中出现不执行尝试的操作:
这个问题是我添加了两个控件,后来不需要直接删除掉,但是并没有将其变量在代码中挨个删除;所以需要将其对应的代码一一删除干净;
2、改变进度条的颜色http://www.codefans.net/articles/1454.shtml
3、使用方法
1.将三个文件添加到工程
2.在对话框上添加一个进度条;
新建一个类CGradientProgressCtrl,其基类为CProgressCtrl
3.为进度条添加变量,变量类型CGradientProgressCtrl
4.
应用:
m_process1.SetRange(0, 100);
m_process1.ShowPercent(TRUE);
m_process1.SetStartColor(RGB(0, 0, 255));
m_process1.SetEndColor(RGB(255, 255, 0));
m_process1.SetTextColor(RGB(0, 0, 255));
m_process1.SetBkColor(RGB(125, 125, 125));
m_process1.SetPos(50);//设置百分比
4、其中GradientProgressCtrl.h
#if !defined(AFX_ENHPROGRESSCTRL_H__12909D73_C393_11D1_9FAE_8192554015AD__INCLUDED_)
#define AFX_ENHPROGRESSCTRL_H__12909D73_C393_11D1_9FAE_8192554015AD__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// EnhProgressCtrl.h : header file
// GradientProgressCtrl.h : header file
#include "MemDC.h"
/////////////////////////////////////////////////////////////////////////////
// CGradientProgressCtrl window
class CGradientProgressCtrl : public CProgressCtrl
{
// Construction
public:
CGradientProgressCtrl();
// Attributes
public:
// Attributes
void SetRange(int nLower, int nUpper);
void SetRange32( int nLower, int nUpper );
int SetPos(int n