MFC_改变窗口大小,随着鼠标的拖动改变

今天在做一个视频播放器的时候,需要用到不同电脑之间分辨率的不同,让其根据当前电脑的分辨率显示其大小
首先假设这个对话框类为CMyDialog。
这篇文章转载了:https://blog.csdn.net/renyongwang1988/article/details/16840735

第一步:在CMyDialog中添加一个成员变量CRect m_rect;

第二步:在CmyDialog的初始化函数OnInitDialog()中添加GetClientRect(&m_rect);

第三步:自定义一个函数,根据控件ID进行处理

void CMyDialog::ChangeSize(UINT nID,int cx,int cy)

{

CWnd &pWnd;

pWnd =GetDlgItem(nID); //获取控件句柄
if(pWnd) //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect); //将控件大小转换为在对话框中的区域坐标
rect.left = rect.left * cX/ m_rect.Width(); // 调整控件大小

rect.right = rect.right * cX / m_rect.Width();

rect.top = rect.top * cY/ m_rect.Heigth(); // 调整控件大小

rect.bottom = rect.bottom * cY / m_rect.Heigth();

pWnd->MoveWindow(rect);
}
}

第四步:调用CmyDialog的WM_SIZE消息,响应其函数:

voidCMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

if(NType != SIZE_MINIMIZED)
{
ChangeSize(IDC_BUTTON1, cx, cy);
ChangeSize(IDC_BUTTON2, cx, cy);
ChangeSize(IDC_BUTTON3, cx, cy);
ChangeSize(IDC_BUTTON4, cx, cy); //其中这些IDC是对话框上的控件的id
GetClientRect(&m_rect); // 将变化后的对话框大小设为旧大小,否则无法还原控件原始位置
}
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现MFC窗口的边缘拖动改变大小的功能,你可以按照以下步骤进行操作: 1. 打开你的MFC项目,并找到你想要实现拖动改变大小功能的窗口的类文件(通常是CDialog或CFrameWnd的派生类)。 2. 在该类的头文件中,添加一个BOOL类型的变量来标识是否正在进行拖动改变大小的操作。 ```cpp BOOL m_IsResizing; ``` 3. 在类的构造函数中,初始化该变量为FALSE。 4. 打开类的消息映射表(通常在.cpp文件中),找到WM_LBUTTONDOWN、WM_LBUTTONUP和WM_MOUSEMOVE消息对应的处理函数。如果没有这些消息对应的处理函数,你需要手动添加它们。 ```cpp ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ``` 5. 在消息映射表中,添加上述消息的处理函数。 ```cpp void CYourWindowClass::OnLButtonDown(UINT nFlags, CPoint point) { // 检查是否在窗口边缘区域按下左键 // 这里可以根据你的需求来判断边缘区域的大小和位置 // 这里假设边缘区域为窗口的4个边界 if (point.x <= 5 || point.x >= (m_WindowWidth - 5) || point.y <= 5 || point.y >= (m_WindowHeight - 5)) { m_IsResizing = TRUE; SetCapture(); // 捕获鼠标消息 } CWnd::OnLButtonDown(nFlags, point); } void CYourWindowClass::OnLButtonUp(UINT nFlags, CPoint point) { if (m_IsResizing) { m_IsResizing = FALSE; ReleaseCapture(); // 释放鼠标消息的捕获 } CWnd::OnLButtonUp(nFlags, point); } void CYourWindowClass::OnMouseMove(UINT nFlags, CPoint point) { if (m_IsResizing) { // 在拖动过程中更新窗口大小 int newWidth = point.x; int newHeight = point.y; SetWindowPos(nullptr, 0, 0, newWidth, newHeight, SWP_NOMOVE | SWP_NOZORDER); } CWnd::OnMouseMove(nFlags, point); } ``` 6. 现在,当你在窗口的边缘区域按下左键并拖动时,窗口应该会根据你的鼠标移动来改变大小。 请注意,这只是一种基本的实现方法。具体实现可能因你的项目结构和需求而有所不同。你可以根据需要调整边缘区域的判断条件和拖动的行为。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值