请教:在程序中弹出一个窗口并在里面绘图,我的做法想新建立一个CDialog类窗口然后在里面绘图,但是OnPaint()函数不是虚函数.该如何实现呢?

解决方案 »

  1.   

    添加WM_PAINT的消息处理函数就可以了。
      

  2.   

    比如说CMyDialou dlg; dlg.Domodal();怎么去获得dlg的CDC?我尝试了无数函数啊~,请指教
      

  3.   

    比如说CMyDialou dlg; dlg.Domodal();怎么去获得dlg的CDC?我尝试了无数函数啊~,请指教上面的函数是在哪里调用的? 一定是在CWND派生类中为了响应某个命令而调用的吧?
    那绘图在哪个类里调用? 不是在CWND派生类中, 而是在DIALOG类中写这个函数.
      

  4.   

    你自定义了dialog,你可以添加该对话框的消息处理函数
    WM_PAINT消息由你自己处理
    也就是添加OnPaint函数,在这个函数里会有你要的DC的
      

  5.   

    楼主可能是想在框架窗口类中调用绘图函数给对话框画图吧?
    应该把这些类的关系把握好, 从整体出发, 不应该类多了就把思路搞乱了. 
    在DIALOG类中的ONPAINT中画图!
      

  6.   

    那个类继承CDIALOG,如果自己添加ONPAINT()函数,就意味着改写原来的ONPAINT函数,而它并非虚函数.问题是这样的:我自己有一个工程,假设是单文档应用程序,单击某一菜单项后弹出一窗口并在里面显示一图形。我想通过弹出一个无模式对话框,并在里面实现图形显示。
      

  7.   

    消息的传递不是以虚函数来层层继承的
    如果你在自己的类中有定义了该消息对应的函数,它就执行该类这个函数,如果没有,就往父类传递。
    所以,你在你自己定义的类中添加该消息的处理函数既可,该消息发生时就调用你定义的那个函数。
    故你只要添加WM_PAINT消息的处理函数既可。
      

  8.   

    To  qiangv(我穿了2条裤衩):
    怎么添加这个消息处理函数呢?能说得具体点吗,小弟比较菜~ 准备加分咯
      

  9.   

    3Q everybody~ 顺便问一下,如果我想弹出一个只带标题栏的空白窗口(没有菜单,背景为白色的那种),应该怎么做呢?
      

  10.   

    运道!to 楼上.那个不是对话框,是sdi.
      

  11.   

    在该自定义的窗口类中加一个WM_PAINT消息即可
      

  12.   

    你说的是只有标题拦和下面白色区域组成的窗口吗?那是sdi只不过去掉了菜单和任务栏等等而已.
    最简单的就是win32项目->选择helloworld.(不知道是不是你要的效果.)
    对话框也可以,把控件全部去掉,背景刷新为白色不就可以了,如果还不够丑陋,把一些属性效果去掉.
      

  13.   

    你可以在CMyDialou对话框使用擦除背景的函数画图呀! 你想怎么画就怎么画!我上次模仿MessageBox做了一个自定义的消息框,可以改变你所想要改变的东西呀!
      

  14.   

    呵呵,楼主是追求丑陋的效果呀
    如果是对话框,你在类视图中找到该对话框的类
    点右键,选择添加消息处理函数(英文应该是Message Handle之类的吧)
    然后在左边列表中选择WM_PAINT
    在右边按ADD AND EDIT
    就OK了