wxWidgets如何才能正确的调用OnPaint函数进行绘图?

GG_Dolls 2011-05-19 07:22:29
界面的结构如下:wxFrame-wxBoxSizer-DrawablePanel。其中,DrawablePanel是我单独分离出来的,继承自wxScrollWindow,主要是想在这个Panel上进行图片的绘制,并且共享给其他类使用。但是现在出了一个问题,OnPaint函数总是无法被调用,从而使得绘图工作无法正常进行。

哪位给看看如何才能实现OnPaint函数周期调用的问题。另外还有一个疑问,wxWindows有没有一个函数,只要子类重写了这个函数,父类就自动调用,而不是添加事件处理(就像Java里的Paint函数一样)?

相关代码如下:

drawablepanel.h

#ifndef __DRAWABLE_PANEL_H__
#define __DRAWABLE_PANEL_H__


#include <wx/scrolwin.h>
#include <wx/bitmap.h>


class DrawablePanel : public wxScrolledWindow
{
public:
DrawablePanel();
~DrawablePanel();

void SetImage(wxBitmap& img);
void SetZoom(int zoom);
int GetZoom();
void SetGridVisible(bool visible);
bool GetGridVisible();

void RefreshNotify();

protected:

void OnPaint(wxPaintEvent& event);

private:

wxBitmap image;
wxBitmap bufferImage;
int zoomLevel ;
bool isGridVisible;


DECLARE_EVENT_TABLE()

};


#endif //__DRAWABLE_PANEL_H__


drawablepanel.cpp

#include "drawablepanel.h"



BEGIN_EVENT_TABLE(DrawablePanel,wxScrolledWindow)
EVT_PAINT(DrawablePanel::OnPaint)
END_EVENT_TABLE()

DrawablePanel::DrawablePanel() : wxScrolledWindow()
{
zoomLevel = 0;
isGridVisible = false;
}

DrawablePanel::~DrawablePanel()
{

}

void DrawablePanel::SetImage(wxBitmap& img)
{
image = img;
RefreshNotify();
}

void DrawablePanel::SetGridVisible(bool visible)
{
if(isGridVisible != visible)
{
isGridVisible = visible;
RefreshNotify();
}
}

bool DrawablePanel::GetGridVisible()
{
return this->isGridVisible;
}

void DrawablePanel::SetZoom(int zoom)
{
int newZoom = zoomLevel + zoom;
if(zoomLevel != newZoom)
{
zoomLevel = newZoom;
RefreshNotify();
}
}

int DrawablePanel::GetZoom()
{
return this->zoomLevel;
}

void DrawablePanel::OnPaint(wxPaintEvent& event)
{
wxMessageBox(wxT("重绘图!"));
wxPaintDC dc(this);
dc.DrawBitmap(image,0,0,true);

}

void DrawablePanel::RefreshNotify()
{
Refresh(true);
Update();
}


...全文
411 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GG_Dolls 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
引用 1 楼 gg_dolls 的回复:

自己找到原因了,就是因为构造里面没有传入一个wxWindow的parent
[/Quote]

到现在为止,发现大部分问题都是因为构造的时候传入值NULL的wxWindow类parent所致,现在终于有些觉悟了,原来在wxWidgets中,这个parent如此重要啊。
老邓 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gg_dolls 的回复:]

自己找到原因了,就是因为构造里面没有传入一个wxWindow的parent
[/Quote]
GG_Dolls 2011-05-24
  • 打赏
  • 举报
回复
自己找到原因了,就是因为构造里面没有传入一个wxWindow的parent

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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