【MFC系列3】永远点不到的按钮

变量的声明与定义

全局变量theApp的定义

CXXXXApp theApp; // 定义

在其他类中想要访问全局变量theApp时,需在stdafx.h中进行声明

#include "XXXX.h"
extern CXXXXApp theApp; // 声明

三个被系统接管的消息(缺省,虚函数回调)

WM_INITDIALOG
WM_COMMAND:IDOK、IDCANCEL

永远点不到的按钮

给WM_SETCURSOR消息添加处理函数

方法一

BOOL CTestRectDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    
    
	if (pWnd->GetDlgCtrlID() == IDC_TEST)
	{
    
    
		RECT rect,rt;
		pWnd->GetWindowRect(&rect);// 获取的坐标为屏幕坐标系中的坐标
		this->ScreenToClient(&rect);// 转换为客户区坐标
		int nWidth = rect.right - rect.left;
		rect.left += nWidth;
		rect.right += nWidth;
		GetClientRect(&rt);
		if (rect.right > rt.right)
		{
    
    
			rect.right -= rect.left;
			rect.left -= rect.left;
		}
		pWnd->MoveWindow(&rect);
	}
	//TRACE("切换%d\n",pWnd->GetDlgCtrlID());
	return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

方法二

BOOL CTestRectDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    
    
	if (pWnd->GetDlgCtrlID() == IDC_TEST)
	{
    
    
		CRect rect,rt;
		pWnd->GetWindowRect(rect);
		this->ScreenToClient(rect);
	
		rect.OffsetRect(rect.Width(), 0); // 平移
		GetClientRect(&rt);
		if (rect.right > rt.right)
		{
    
    
			rect.OffsetRect(-rect.left, 0);
		}
		pWnd->MoveWindow(rect);

	}
	//TRACE("切换%d\n",pWnd->GetDlgCtrlID());
	return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

Guess you like

Origin blog.csdn.net/wlwdecs_dn/article/details/121203213