Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 允许用户在CStatic C++;MFC应用程序_C++_Mfc_Picturebox_Drawrectangle - Fatal编程技术网

C++ 允许用户在CStatic C++;MFC应用程序

C++ 允许用户在CStatic C++;MFC应用程序,c++,mfc,picturebox,drawrectangle,C++,Mfc,Picturebox,Drawrectangle,我有一个MFC应用程序,对话框中有一个图片控件。最后,我想允许用户通过鼠标拖动图片控件在我加载的图像上绘制一个可调整大小的矩形 我将自己的图片控件类定义为CStatic的一个子类,并且正在处理mouse down、mouse up和mouse move事件,但我似乎不知道如何允许用户绘制矩形。如能就此提供任何指导,将不胜感激 我看过的大多数示例都向我展示了如何在CView:CWnd中绘制矩形,但我对MFC还不是很熟悉,所以我有点迷茫。谢谢。当用户单击鼠标按钮时,您需要记录鼠标坐标,以便知道矩形的

我有一个MFC应用程序,对话框中有一个图片控件。最后,我想允许用户通过鼠标拖动图片控件在我加载的图像上绘制一个可调整大小的矩形

我将自己的图片控件类定义为CStatic的一个子类,并且正在处理mouse down、mouse up和mouse move事件,但我似乎不知道如何允许用户绘制矩形。如能就此提供任何指导,将不胜感激


我看过的大多数示例都向我展示了如何在CView:CWnd中绘制矩形,但我对MFC还不是很熟悉,所以我有点迷茫。谢谢。

当用户单击鼠标按钮时,您需要记录鼠标坐标,以便知道矩形的起始位置。您还应该设置某种类型的标志,以指示用户正在拖动鼠标。当用户移动鼠标时,获取当前鼠标位置并使用或类似功能绘制矩形。当用户释放鼠标按钮时,清除前面提到的“标志”,您就完成了这部分过程


您还需要处理其他事件,例如控件和/或父窗口失去焦点,以便取消拖动/绘制操作。由于您的问题中没有包含任何代码,因此很难说您还需要做什么,但这些都是基础。

在窗口内容顶部绘制拖动矩形的常用技术如下所示:

这是Win32 API编码,而不是MFC编码,但差别很小。其基本思想是使用SetROP2(hdc,R2_NOTXORPEN)绘图;将现有像素反转,然后再次绘制相同的矩形将这些像素重新反转回原始图像