用VS2010MFC制作简易画图程序,为何画出来的矩形是重影,如何解决?拖动工具栏以后,图片就自动

用VS2010MFC制作简易画图程序,为何画出来的矩形是重影,如何解决?拖动工具栏以后,图片就自动,第1张

是这样启雀的,MFC创建的窗口,在接收到“重绘”消息的时候会擦除窗口的内容并绘制控件的图案(这意味着如果你不是在重绘消息的处理函数中绘制图形,那么图形被擦除后也不会再恢复),而在其它情况下窗口是不会擦除内容并重绘的。所以如果你只是在鼠标拖拽的事件中绘制矩形的话,绘制新矩形之前旧的矩形是不会被擦掉的。然而,也不能简单地使窗口重绘来到达目的,因为那样会导致之前已经绘制好的所有图形被擦掉,最后窗口只剩下最新绘制的矩形。要达到画图的目的,你得将已绘制好的图案储存在内存中(以位图的形式),而正在绘制的矩形则只在窗口上绘制,不在内存中的位图中绘制,而当当前的图形完全确定(即松开鼠标)时,再将它绘制入内存中的位图。这样处理后,就可以在鼠标拖动过程中(需要实时删除之前的图形)放心地使窗口重绘(这会使之前的图像被擦除,不会留下痕迹),然后在重绘消息处理函数中(擦除过程由MFC框架自动手或完成,你的处理函数会在擦除后被调用,负责绘制图案)将内存中的图案复制到窗口上,这使得之前已经确定的图案重新被显示。最后再向窗口中绘制当前还未确定的图形。至于具体实现,主要途径就是创建内存画布,网页搜索“MFC双缓冲绘图”,你会得到通过暂时在内存中绘图,最后再向屏幕复制图案以防止重绘时窗口闪烁的方法,在它的基础上稍加改动(例如将位图对象从临时改为全局以保留图像,请结合自己的思考修改其它部分)即可实现画图的功能。过程中请务必记住,窗口上的图像很容易就会因遮挡或重绘而消失,而且不方便针对性地删除某一个与其它图案重叠的图形,所以需要在内存中保存你毕旁伍希望保存的图像。

graphics.h这个是tc的绘图头文件,vc不行,如果非要用,那就要用别人改写好的

不过没那个必要,如果是控制台绘图的话,那就只需要调用windows的api函数就行了,如果想新建一个窗口,那就选mfc exe的那个,这个是桌面应用程序

给你一段控制台绘图的代码,自己去看

#include 凳悔<windows.h>

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

#include <tchar.h>

extern "C"

{

WINBASEAPI HWND WINAPI GetConsoleWindow()

}

int main(int argc, char *argv[])  团册 //主线程运行结束,辅助线程也结束。

{

HWND hwnd

HDC hdc

printf("There are some words in console window!\n在控制台窗口中绘图!\n")

system("Color 3D")

hwnd = GetConsoleWindow()

hdc = GetDC(hwnd)

MoveToEx(hdc,100,100,NULL)

LineTo(hdc, 200, 300)

Rectangle(hdc, 10, 30, 300, 枣或正50)

TextOut(hdc, 10, 10, _TEXT("Hello World\nYesNoConcel!"), 20)

ReleaseDC(hwnd, hdc)

getch()

printf("After drawing!\n")

return 0

}

1。 vs2010只是一个集明禅成开发环境,里面支持VB.NET C# C/C++,不知道你打算用那种语言。

2。 集成开发环境中的编程枣腔语言是支持windows的win32SDK,通过windows API,启动外部程序。

3。 photoshop是支持命令行参数,你可以将jpg文件作为参数激岩尘来使用,比如photoshop xxx.jpg回车,就能打开xxx.jpg图形文件,当然,你的xxx.jpg路径必须是正确。

4。windows API的调用外部程序函数有:WinExec,ShellExecute,CreateProcess.具体用法,请参看msdn或百度百科均有介绍


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12333167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存