对话框形成时对对话框内PICTURE控件画图

u012569529 2013-12-16 09:00:52
代码如下
CPaintDC dc(this); // device context for painting

CWnd *pWnd=GetDlgItem(IDC_pic_zhijian);
CRect rc;
pWnd->GetClientRect(&rc);

CDC *pDC=m_pic_zhijian.GetDC();
pDC->FillSolidRect(rc,RGB(255,0,255));
ReleaseDC(pDC);
DeleteDC(*pDC);

// TODO: Add your message handler code here

// Do not call CDialog::OnPaint() for painting messages
为什么在对话框里面IDC_pic_zhijian上未被画图,若想在对话框形成时就对里面的IDC_pic_zhijian控件画图,怎么去实现呀。
...全文
84 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2013-12-17
  • 打赏
  • 举报
回复
m_pic_zhijian是在对话框中定义的 1 你是 资源 中 拖 进 对话框 的, 他 原来 的 类型 是 CStatic ,你把 他 改成 CPicture 2 包含 CPicture.h 3 其实 Picture 控件 是 不要 你 绘制的, SetBitmap 就 可以了。 4 要 自绘 就在 OnPaint
昨夜无风 2013-12-17
  • 打赏
  • 举报
回复
CDC *pDC=m_pic_zhijian.GetDC(); 改成 CDC *pDC=pWnd->GetDC(); 还有,屏蔽掉最后的 CDialog::OnPaint()
schlafenhamster 2013-12-16
  • 打赏
  • 举报
回复
“Picture类的哪有OnPaint函数啊”, 是窗口 就有 OnPaint。 Picture 是 CStatic 你要 派生 才是。
schlafenhamster 2013-12-16
  • 打赏
  • 举报
回复
代码没大错, 只是少了 一句: 代码 CPaintDC dc(this); // device context for painting 知道 这句 干了 什么 ? 他会 给 控件 发 擦除 背景 消息 (invalidate),但 控件 的 擦除 背景 要等 对话框 Onpiant 结束后,才 运行。 如果 这时 你 马上 画 控件 , 你画的 东西 , 在对话框 paint 退出后 ,就会 被 控件 的 擦除 背景 , 擦除 掉。 所以: 你 要 先让控件 UpdateWindow 使 控件 窗口 有效。 就是说: CWnd *pWnd=GetDlgItem(IDC_pic_zhijian); pWnd->UpdateWindow(); .
u012569529 2013-12-16
  • 打赏
  • 举报
回复
Picture类的哪有OnPaint函数啊,不是只有对话框才有吗
u012569529 2013-12-16
  • 打赏
  • 举报
回复
楼上的,我就是在这个对话框的OnPaint上的画的呀,这个对对话是个在主对话框上点击产生的非模态对话框,然后这个非模态对话框上有个PICTURE控件,想在非模态对话框形成时改变picture背景颜色,结果实现不了。
u012569529 2013-12-16
  • 打赏
  • 举报
回复
也不知道我理解错误了,还是怎么搞的,那功能还是没实现。
u012569529 2013-12-16
  • 打赏
  • 举报
回复
不是WS_CLIPCHILDREN 这种风格
u012569529 2013-12-16
  • 打赏
  • 举报
回复
可能是楼上水平太高了,能否具体指点下,我问的m_pic_zhijian是在对话框中定义的,CPicture中如何调用也没回答下,还有那程序是不是要修改下,因为直接在Cpicture中调用是编译不过去的
worldy 2013-12-16
  • 打赏
  • 举报
回复
你这样是看不到画的图的,画完之后马上就被擦掉了 你应该在Picture类的OnPaint上画才可以
schlafenhamster 2013-12-16
  • 打赏
  • 举报
回复
上面说的有一个条件,就是对话框不能有 WS_CLIPCHILDREN 风格,否则:对话框 不会 发 Invalidate 给控件, UpdateWindow 就不起 作用了。 这时要在 UpdateWindow() 前 自己 加: pWnd->Invalidate();
u012569529 2013-12-16
  • 打赏
  • 举报
回复
楼上还有几个问题问下,烦请指点下,你的意思是不是这样: 第一步:建一个类,姑且取名 CPicture,基类选择CStatic; 第二步:将对话框中图像控件pictur与一变量m_pic_zhijian关联,类型选择CPicture; 第三步:在 CPicture类中添加虚函数onpaint,把我那段程序放在onpaint中。 不知道我理解的对不对,如果对的话,有几个问题m_pic_zhijian是在对话框中定义的,CPicture中如何调用,我的意思,这段程序是不是要修改什么,烦请指教下,我是菜鸟。
schlafenhamster 2013-12-16
  • 打赏
  • 举报
回复
从 CStatic 派生。 add class , 输入新类名 选择 基类 CStatic 。
u012569529 2013-12-16
  • 打赏
  • 举报
回复
在对话框中加了pWnd->UpdateWindow();还是没画出来。用一个按钮触发同样程序就画出来了。
u012569529 2013-12-16
  • 打赏
  • 举报
回复
问一个菜鸟问的问题,具体是怎么派生。
在Windows操作系统上,VisualBasic作为一门计算机语言,功能非常强大,而且简单易学。VisualBasic提供可视化设计工具,编程人员可利用VisualBasic提供的控件轻松的“画”出应用程序的友好界面,因此容易入门,入门以后就有能力进一步学习难度更大的编程语言。VisualBasic作为编程人员的首选程序设计语言,有如下特点: 1、VisualBasic是开发Windows应用程序的强有力的工具,使用了最先进的程序设计思想,能轻而易举的开发出符合Windows规范和风格的应用程序; 2、VisualBasic在科学计算、多媒体软件开发、网络应用等方面都有强大的功能,尤其在数据库开发方面,提供了许多控件,便于连接、查询和显示查询结果,现在很多管理软件,包括一些大型软件,都是利用VisualBasic开发的; 3、VisualBasic改变了传统的程序的机制,采用“事件驱动”方式,用户操作产生不同的事件,程序根据这些事件去分别执行不同的子程序。编程人员可以分别编写出这样一些子程序,因此使编程难度大大下降。   在VisualBasic语言中,控件是用户界面的基本要素,是进行可视化程序设计的重要基础,它不仅关系到界面是否友好,还直接关系到程序的运行速度以及整个程序的好坏。每个控件都具有它的属性、方法和事件,设计窗体就必须很好的掌握控件的属性和应用方法。控件具有很多相同的属性,如标识控件名称的Name属性、标识控件标题的Caption属性、有效属性Enable、可见属性Visible、标识控件位置和大小的Top、Left、Width、Height、属性、定义背景色的BackColor属性、定义前景色的ForeColor属性和定义字体类型的Font属性,各个控件也有其特有的一些属性。   VisualBasic中的控件分为两种,即标准控件(或内部控件)和ActiveX控件。内部控件是工具箱中的“常驻”控件,始终出现在工具箱里,而ActiveX控件是扩展名为.ocx的文件(在Windows\System文件夹里),它是根据变成需要添加到工具箱里的。   在一般情况下,工具箱里只有标准控件,为了把ActiveX控件添加到工具箱里,可按以下步骤执行: (1)在菜单里选择“工程-部件”,弹出“部件”对话框; (2)在对话框中选择“控件”选项卡,显示ActiveX控件列表; (3)在列表框中找到需要添加的控件名称,单击控件名称左侧的复选框; (4)使用同样的方法选择需要添加的其它控件; (5)单击“确定”按钮,即可将所选ActiveX控件添加到工具箱里。 窗体(FORM)的常用属性 属性 说明 (Name)窗体的名称 ActiveControl返回焦点所在的控件,该属性设计阶段不可用,运行只读。 Appearance外观效果,取值为:0 平面1 3D(立体) AutoRedraw是否自动刷新或重画窗体上所有图形[获得或设置从绘图(graphics)方法到一个持久性位图的输出],取值为:True False BackColor背景颜色,可从弹出的调色板选择。 BorderStyle设置边界类型,取值为: 0 None(无边界框架)1 FixedSingle(窗口大小固定不变的单线框架) 2 Sizable(窗口大小可变的标准双线框架) 3 FixedDialog(窗口大小固定的对话框窗体) 4 FixedToolWindow(窗口大小固定的工具箱窗体) 5 Sizable ToolWindow(窗口大小可变的工具箱窗体) Caption窗体的标题 ClipControls决定Paint事件的graphics方法是重画整个对象,还是重画新显示的区域。取值为: True或False ControlBox是或有控制框, 取值为: True 有 False 无 DrawMode设定窗体上绘图(graphics方法),Shape,Line等控件的输出外观,有16种可选: 1 黑色 2 非或笔,设置值15的反相 3 与非笔,背景色以及画笔反相二者共有颜色的组合 4 非复制笔,设置值13的反相 5 与笔非,画笔以及显示色反相二者共有颜色的组合 6 反相,显示颜色反相 7 异或笔,画笔颜色以及显示颜色的异或 8 非与笔,设置值9的反相 9 与笔,画笔以及显示色二者共有颜色的组合 10 非异或笔,设置值7的反相 11 无操作,该设置实际上是不画图 12 或非笔,显示颜色与画笔颜色反相的组合 13 复制笔,用ForeColor属性指定的颜色,此为默认值 14 或笔非,画笔颜色与显示颜色反相的组合 15 或笔,画笔颜色与显示颜色的组合 16 白色 DrawStyle设定绘图相关方法使用的直线样式, 有7种可选: 0 实线,此为默认值 1 虚线 2 点线 3 单点划线 4 双点划线 5 无线 6 内部实线 DrawWidth设定绘图相关方法使用的直线宽度 Enabled是或把鼠标或键盘事件发送到窗体,取值为: True 可用 False 不可用 FillColor填充颜色, 可从弹出的调色板选择。 FillStyle填充样式, 有8种可选: 0 全部填充 1 透明,此为默认值 2 水平直线 3 竖直直线 4 上斜对角线 5 下斜对角线 6 十字线 7 交叉对角线 Font字型,可从弹出的对话框选择字体,大小和风格 FontTransparent输出数据是否允许重叠(获得或设置一个值,决定是否显示窗体,打印机或PictureBox上的背景文本/图形)。取值为: True或False ForeColor前景颜色,可从弹出的调色板选择。 HasDC决定是否为该控件分配了唯一的显示上下文。取值为: True或False Height窗体的高度 HelpContextID指定一个对象的缺省帮助文件上下文标识符 Icon为窗体设计图标,该图标位于标题栏的左端 KeyPrevier获得或设置是否在激活对象的上的控件的键盘事件之前,优先激活对象键盘事件。取值为: True或False Left窗体距屏幕左边界的距离 LinkMode获得或设置用于DDE会话的链接类型并激活连接,取值为: 0 None 1 Source LinkTopic获得或设置目标控件的源应用程序和主题 MaxButton窗体右上角最大化按钮是否显示,运行只读, 取值为: True 显示 False 不显示 MDIChild是否为MDI窗体的子窗体, 取值为: True 为MDI窗体的子窗体 False 否 MinButton窗体右上角最小化按钮是否显示,运行只读, 取值为: True 显示 False 不显示 MouseIcon MousePointer=99,设定一个自定义的鼠标图标 MousePointer Moveable是否可以移动窗体, 取值为: True 可以移动 False 不可以移动 NegotiateMenus决定是否将对象的菜单合并到该窗体的菜单栏上。取值为: True或False OLEDropMode 获得或设置该对象是否能作为一个OLE放下目标, 取值为: 0 None(无) 1 Manual(手动) Palette 获得或设置一个图象,包含了当PaletteMode被设置为Custom用于调色板的对象。 PaletteMode 获得或设置一个值,决定对于对象的控件使用哪个调色板。取值为: 0 Halftone 1 UseZOrder 2 Custom Picture 窗体背景图片 RightToLeft 文本书写是否自左向右。取值为: True False 自右向左 ScaleHeight 自定义坐标系的纵坐标轴的高度 ScaleLeft 自定义坐标系的左边界起点的横坐标 ScaleMode 获得或设置一个值,指示当使用graphics方法或可定位的控件,自定义坐标系的单位, 有8种可选: 0 自定义 1 表示单位为twip(缇),每英寸=1440缇,每厘米=567缇 2 表示单位为point(磅) ,每英寸=72磅,每磅=20缇 3 表示单位为像素,是监视器或打印机分辨率的最小单位 4 表示单位为字符,每个水平单位为120缇,每个垂直单位为240缇 5 表示单位为in(英寸) 6 表示单位为mm(毫米) 7 表示单位为cm(厘米) ScaleTop 自定义坐标系的上边界起点的纵坐标 ScaleWidth 自定义坐标系的横坐标轴的宽度 ShowInTaskbar 窗体或MDI窗体是否出现在Windows95的任务栏。取值为: True 出现 False 不出现 StartUpPosition 窗体第一次出现的位置, 有4种可选: 0 没有指定初始位置 1 设定在所属项目的中央 2 设置在屏幕的中央 3 设置在屏幕的左上角 Tag 存储程序所需的附加数据 Top 窗体距屏幕顶部边界的距离 Visible 窗体是否可见, 取值为: True 该对象可见 False 该对象不可见 WhatsThisButton 获得或设置是否在一个窗体或MDI窗体的标题上显示"这是什么"按钮。取值为: True或False WhatsThisHelp 获得或设置是否在上下文相关帮助中, 使用Windows95帮助或主帮助窗口提供的"这是什么"弹出菜单。取值为: True或False Width 窗体的宽度 WindowStart 获得或设置一个窗体窗口运行的可见状态, 取值为: 0 窗体正常状态 1 窗体最小状态 2 窗体最大状态

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧