vs2010 MFC 对话框程序 窗口拖动缩放

如题。
请教,如何在鼠标拖动窗口时不要onpaint,在放开鼠标时才onpaint?

我的绘图代码放在onpaint内的一个绘图函数内。
void CMyadsDlg::OnSize(UINT nType, int cx, int cy)
在上面这个函数内根据cx和cy数值,处理更新绘图所需的数据,
我看到有网友说onsizeing是拖动过程中执行,onsize是松开鼠标才执行。我现在用的onsize为啥拖动时也刷新
谢谢

c++
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复lnhv013710: 不好意思,之前没有看到那个回答,他的回答的方法的确更好,我也学习了新的东西,谢谢
4 个月之前 回复
lnhv013710
lnhv013710 回复操作员马善福(贵阳专业挖机): 还有您提到的那两个同样的问题,其中一个虽然不满意答案但是那会我觉的没啥更好的办法了,所以这个问题的300分给您了。但是另外一个160分的问题,一个网友提到另外一个更好的办法myarray.m_pData,8,所以分给他了
4 个月之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 你修改了问题?怎么也不说一声。看我更新的代码
4 个月之前 回复
weixin_45036196
weixin_45036196 支持一下。
4 个月之前 回复

3个回答

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

在OnPaint
if(!KEY_DOWN(VK_LBUTTON))
{
你原来的代码
}

之前的问题 https://ask.csdn.net/questions/756791 不知道是否解决,如果解决,麻烦点下采纳,谢谢啦


图片说明


// Q760485View.cpp : implementation of the CQ760485View class
//

#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS can be defined in an ATL project implementing preview, thumbnail
// and search filter handlers and allows sharing of document code with that project.
#ifndef SHARED_HANDLERS
#include "Q760485.h"
#endif

#include "Q760485Doc.h"
#include "Q760485View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CQ760485View

IMPLEMENT_DYNCREATE(CQ760485View, CView)

BEGIN_MESSAGE_MAP(CQ760485View, CView)
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CQ760485View::OnFilePrintPreview)
    ON_WM_CONTEXTMENU()
    ON_WM_RBUTTONUP()
    ON_WM_CREATE()
    ON_WM_TIMER()
END_MESSAGE_MAP()

// CQ760485View construction/destruction

CQ760485View::CQ760485View() noexcept
{
    // TODO: add construction code here

}

CQ760485View::~CQ760485View()
{
}

BOOL CQ760485View::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return CView::PreCreateWindow(cs);
}

// CQ760485View drawing

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

void CQ760485View::OnDraw(CDC* pDC)
{
    CQ760485Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    if (KEY_DOWN(VK_LBUTTON))
    {
        pDC->TextOut(100, 100, _T("SIZING"), 6);
        return;
    }
    // TODO: add draw code for native data here
    CString str;
    str.Format(_T("%d"), m_count);
    RECT rect;
    rect.top = 100;
    rect.left = 100;
    rect.bottom = 200;
    rect.right = 200;
    pDC->DrawText(str, str.GetLength(), &rect, 0);
}


// CQ760485View printing


void CQ760485View::OnFilePrintPreview()
{
#ifndef SHARED_HANDLERS
    AFXPrintPreview(this);
#endif
}

BOOL CQ760485View::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}

void CQ760485View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}

void CQ760485View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}

void CQ760485View::OnRButtonUp(UINT /* nFlags */, CPoint point)
{
    ClientToScreen(&point);
    OnContextMenu(this, point);
}

void CQ760485View::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
#ifndef SHARED_HANDLERS
    theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
}


// CQ760485View diagnostics

#ifdef _DEBUG
void CQ760485View::AssertValid() const
{
    CView::AssertValid();
}

void CQ760485View::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}

CQ760485Doc* CQ760485View::GetDocument() const // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQ760485Doc)));
    return (CQ760485Doc*)m_pDocument;
}
#endif //_DEBUG


// CQ760485View message handlers


int CQ760485View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;

    // TODO:  Add your specialized creation code here

    m_count = 0;
    SetTimer(123, 500, NULL);
    return 0;
}

void CQ760485View::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default

    if (nIDEvent == 123)
    {
        m_count++;
        if (!KEY_DOWN(VK_LBUTTON))
        {
            this->GetDocument()->UpdateAllViews(NULL);
        }
    }
    CView::OnTimer(nIDEvent);
}

lnhv013710
lnhv013710 还有您提到的那两个同样的问题,其中一个虽然不满意答案但是那会我觉的没啥更好的办法了,所以这个问题的300分给您了。但是另外一个160分的问题,一个网友提到另外一个更好的办法myarray.m_pData,8,所以分给他了
4 个月之前 回复
lnhv013710
lnhv013710 我的是dialog程序,你的是document程序,看不太懂,麻烦简化下代码,把没有必要的去掉,我复制黏贴,谢谢
4 个月之前 回复

因为现在的操作系统都是在鼠标左键按下并且移动的过程中就“改变了窗口大小”,因此这两个消息都会触发的。
简单说,你处理OnSize就够了。

鼠标按下时候做个标记,移动时候也做一个,两个标记为真时候,onpaint函数内直接返回不做绘图,你试试这样行不行。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vs2010 MFC 对话框程序 窗口拖动缩放
如题。rn请教,如何在鼠标拖动窗口时不要onpaint,在放开鼠标时才onpaint?rnrn我的绘图代码放在onpaint内的一个绘图函数内。rnvoid CMyadsDlg::OnSize(UINT nType, int cx, int cy)rn在上面这个函数内根据cx和cy数值,处理更新绘图所需的数据,rn我看到有网友说onsizeing是拖动过程中执行,onsize是松开鼠标才执行。我现在用的onsize为啥拖动时也刷新rn谢谢
MFC无边框对话框鼠标拖动和缩放
三步实现MFC对话框Boder为None对话框鼠标拖动缩放功能。 第一步,实现对话框的WM_NCHITTEST消息,代码如下: LRESULT CTestDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rect; GetWindowRect(&rect); if (point.x <=...
MFC 无边框对话框缩放
vs2013 无边框对话框缩放Demo及文档说明。
mfc对话框及控件缩放
mfc对话框及控件缩放(控件随着对话框的大小成比例缩放)
如何拖动无标题MFC对话框窗口?
必须是利用 SetCapture 和 ReleaseCapture 这两个函数来实现的这种方法。rn不能使用 OnNcHitTest 这种方法。rnrn请高手指导一下。rn谢谢。rnrn
SDL2缩放窗口in MFC
SDL2窗口缩放大坑一个 解决方案 没有使用SDL的消息响应 关键点:如果不采用sdl的消息机制,就让改变窗口的操作放在SDL的播放函数中 改变MFC 播放窗口大小—–>改变SDL窗口大小,SDL_S额头WindowSize(…)—–>释放SDL绘图内容(SDL_WINDOW不要释放!!)—–>重建SDL绘图内容 代码 //SDL初始化代码,我采...
MFC窗口的缩放
mfc解决了窗口拖拽功能的demo 含有 ListControl TabControl
MFC 窗口缩放
C++ MFC 对话框 缩放 实现MFC窗口的缩放...
VS2010/MFC 向导对话框
VS2010 MFC 属性页对话框 向导对话框 注意在继承CPropertySheet类的两个构造函数中AddPage()的对话框,一定要严格按照顺序添加。
【MFC-10】VS2010/MFC基于对话框程序的登录窗口实现
一、开发环境 1、VS2010; 2、C++ / MFC; 二、登录窗口设计示例 1、新建基于对话框的MFC项目,命名为“UserLogin”; 2、资源视图中插入一个Dialog,修改ID为:IDD_LOGIN_DIALOG,标题修改为登录对话框,并添加控件,结果如图1所示; 图1 3、创建登录对话框类:CLoginDlg,添加控件变量如
MFC-10】VS2010/MFC基于对话框程序的登录窗口实现
https://blog.csdn.net/qingyang8513/article/details/50751422 一、开发环境 1、VS2010; 2、C++ / MFC; 二、登录窗口设计示例 1、新建基于对话框的MFC项目,命名为“UserLogin”; 2、资源视图中插入一个Dialog,修改ID为:IDD_LOGIN_DIALOG,标题修改为登录对话框,并添加控件,结...
MFC禁止对话框的拖动
先找到要禁止对话框相对应的类,然后打开属性,在里面添加这个消息(WM_SYSCOMMAND)。 在找到该消息在CPP中的实现函数,添加如下代码即可实现禁止对话框的拖动。 /*禁止主对话框移动*/ void CA9::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nID == SC
MFC无边框对话框的拖动
void init_connect::OnLButtonDown(UINT nFlags, CPoint point) { // TODO:  在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnLButtonDown(nFlags, point); if (point.y //判断是否在窗口的顶部 { SendMessage(WM_SYSCOMMAND,
MFC 对话框拖动
//CHN 设置对话框可拖动rnLRESULT CMainKeyboardDlg::OnNcHitTest(CPoint point)rnrn CDialogEx::OnNcHitTest(point);rn return HTCAPTION;rnrn我用这个函数设置的对话框拖动,请问高手一下我怎么处理可以让对话框不能拖动到屏幕之外去(包括上下左右)四个方向。rn谢谢
VS2010 MFC窗口分割
很好的例子说明VS2010 MFC下的窗口分割
MFC - 点击拖动窗口
#define SC_DRAGMOVE 0xF012 void Ctest110Dlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 SendMessage(WM_SYSCOMMAND,SC_DRAGMOVE,0);//拖动窗口 CDialogEx::OnLButtonDo
MFC—拖动窗口移动
LRESULT CCjInfoDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rc; GetClientRect(&rc); ClientToScreen(&rc); return rc.PtInRect(point) ? HTCAPTION : CDi...
mfc窗口拖动的问题
在主窗口上,我建的两个拆分窗口,一共三个窗口呈 "吕口" 排布,现在我想使得左下角的窗口在拖动改变大小时,窗口的宽度呈阶rn梯式跳跃的变化:0,40,80,120...缩小也是,怎么办?rnrn在OnSize中调用MoveWindow好像不太好使!!!rnrnrn求指教!!!
MFC 无标题窗口拖动
说实话 MFC 提供的标题头不好看,而且修改麻烦。在实际使用过程中,我大多数情况下都是无标题对话框。 这样就会产生一些问题,比如 1、不能最小化或者点击任务栏图标不能最小化最大化 2、窗口不能拖动等问题 今天我们来解决第二个问题 能让窗口拖动有很多办法,有优点有缺点,根据自身程序决定了 1、当鼠标在窗口内移动或者点击都会产生WM_NCHITTEST消息,响应函数OnNcHitTest会返
VS2010 MFC对话框程序 打包发布步骤
打开VS2010,新建项目-->其他项目类型-->visual studio installer-->安装项目;项目建立成功后,目标计算机的文件系统中包含三个文件夹,分别是“应用程序文件夹”“用户的“程序”菜单”、“用户桌面” 右键点击“应用程序文件夹”,添加文件,将已编译好的VS2010项目文件中Debug文件夹下的文件全部添加进来。如果Debug文件夹中还有文件夹,也要点击...
基于VS2010的MFC对话框计算器程序
本程序是基于VS2010设计的基于MFC对话框的计算器程序,能实现基本数学运算的要求,可在此基础上进一步设计高级的科学计算器,适合初学者编写类似代码作为参考,测试可用
MFC窗口自适应比例缩放
1.新建数据结构并声明变量 using namespace std; struct IDandRect { int id; CRect rect; }; vector vec; 2.记录初始数据 void CautosizeDlg::GetInitSize() { CRect Rect; IDandRect idrect; idrect.id = -2;
VC++ MFC窗口缩放类函数
VC++ 中窗口缩放库函数。 可以用于构建MFC框口时,使用此类函数
vs2010 mfc对话框五子棋小游戏
有完整的可直接使用的代码,代码内有很清晰的解释,非常适合用来入门。可实现五子棋双人对战、判断输赢、认输、悔棋、显示鼠标位置、五子棋规则介绍的功能。
基于VS2010的MFC对话框之图片查看器
所实现的功能: 1.采用双缓冲技术解决屏幕闪烁问题; 2.浏览过程中实现图片的拖拽; 3.浏览过程中实现图像的放缩; 4.对当前文件下所支持图片格式(BMP、JPG、PNG)进行显示; 5.实现“上一张图片”和“下一张图片”功能; 6.随时进行窗口的最小化、正常、最大化显示的切换; 所用到的工具:CImage类
CColorDialog 颜色对话框 VS2010/MFC
CColorDialog 颜色对话框 VS2010/MFC 同CFontDialog类似。初始化时候可以传入NULL,也可以传入COLORREF类型的变量。通过GetColor()获取颜色值,分量通过分量函数获取
VS2010基于对话框的MFC的菜单
正在学习MFC,写的几个基于对话框的菜单文件 包括: 动态创建菜单 动态创建一个弹出式菜单 创建包含图标的菜单 任务栏托盘弹出菜单 使用VS2010编写的~ 适合新手学习~
vs2010,MFC 使用对话框报错
现象:   代码中并不显红,且该对话框的控件双击均可以到达响应函数中,依然报错: error C2065: “IDD_DIALOG6”: 未声明的标识符   解决办法:在stdafx.h中包含Resouce.h即可
MFC如何设置拖动对话框
1、添加消息 OnNcHitTest LRESULT CNCHitTextDlg::OnNcHitTest(CPoint point) {     // TODO: 在此添加消息处理程序代码和/或调用默认值     return CDialog::OnNcHitTest(point); } 2、添加一下代码     UINT nHitT
MFC对话框可拖动化
在对话框中,分为客户区和非客户区。即客户可修改操作的区域与不可修改操作的区域。标题栏即属于非客户区。 为了实现窗口可拖动化,在直接贴图的窗口中,即自绘背景图中需要自己实现客户区与非客户区的区分,之后实现非客户区的鼠标拖动功能。 LRESULT CfmudemoDlg::OnNcHitTest(CPoint point)//鼠标状态测试函数(一直循环) { ScreenT
MFC总结(2)---MFC窗口的缩放
我们在创建MFC项目的时候,创建的窗口,默认是不可以用鼠标进行改变的。要想达到用鼠标缩放窗口,我们只需要更改一下该窗口的属性即可: 修改对话框模板属性 styles-->>Border 属性改为Resizing 我们虽然能够达到了用鼠标进行缩放窗口的效果,但是如果有内容的话,会发现当缩放的时候会有问题。所以,我们还需要解决下这个问题: 窗口中控件是否随着窗口大小改变而改变,需要使
★★如何禁止拖动对话框窗口?
rt
MFC的窗口和对话框问题
MFC中怎么实现窗口和对话框的淡入淡出效果呢???,谢谢大家!
MFC 对话框(窗口)透明
程序的实现步骤基本就是这样,当然也有其他方法。希望大家能积极开拓,展示更多方法。 SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE)^WS_EX_LAYERED); #ifdef _UNICODE HINSTANCE hInst = LoadLib
MFC 对话框 窗口
我想达到的设计目标是:运行后,出现一个对话框,按确定后,弹出一个窗口,并在窗口出现一条线.rn问题是,新建时,是选single docment 还是 dialog basedrn选single docment 的话一开始出现的是窗口,而不是对话框,选dialog based 的话,我又不会创建一个通过BUTTON连接的窗口rn还有,在窗口出现的线,我设想是在 ondraw 里面定义好,然后用 moveto lineto 画出来
MFC对话框的窗口过程
在工程里派生了一个CDialog类 并且关联了一个对话框模板。rn我想问下 在处理消息的时候是调用了哪个对话框窗口过程啊,rn在SDK里面每个对话框自己都会写个相应的窗口过程,在mfc里面如果派生了2个对话框类rn是不是就帮我产生2个窗口过程啊。rn还有控件也一样 改写窗口过程用SetWindowlong 如果我在对话框里面搞了3个edit box rn是不是就有三个窗口过程。初学者望高手赐教!
VS2010语音通信程序_MFC
本程序由经典点对点语音通信程序改装,由VC移植至VS2010,符合VS2010新特性,仅含有语音通信一种功能,便于进行其它功能开发。
MFC怎么实现画图、缩放、拖动
我要从buf缓冲中读取图像数据,然后画到dialog中,通过鼠标进行缩放、拖动平移等操作。rn我该怎么弄?rn用CXimage可以实现吗?rn现在还不知道怎么把buf中的数据画出来,就指教···rn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img]
mfc对话框程序添加控制台窗口
在基于对话框的mfc程序中,添加控制台窗口用于输出提示信息
mfc简单画图(拖动,缩放,移动图形)
画圆,画弧,矩形,多边形,简单画图(拖动,缩放,移动图形)
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数