Domodal之后立刻在新窗口的pictureBox控件画图失败,该怎么解决
Domodal之后立刻在新窗口的pictureBox控件画图失败
问题如下:为了在Domodal之后的窗口立刻在pictureBox控件绘图,重载了数个函数进行绘图操作,皆未绘制成功。请问要实现这个功能应该在哪个函数中添加操作?
在新窗口重载了OnPaint(),OnCreate(LPCREATESTRUCT lpCreateStruct),OnShowWindow(BOOL bShow, UINT nStatus)
,OnChildActivate()这几个函数。
结果都没有在Domodal出来的新窗口没有在pictureBox中绘制图片。
以下是代码:
DrawImage2和DrawImage1已经在OnInitDialog初始化。
IDC_PICTURE88和IDC_PICTURE8是俩个不同的pictureBox的控件ID。
void RotationDialog::ShowImage(IplImage* img, UINT ID) //显示图片的函数
{
//如果有用CImage类的显示图片的函数,请给一个。
//这个图片显示函数是基于opencv的图像显示类构建的,在创建完之后的其他地方能显示图片中能正常绘制。
CDC*pDC=GetDlgItem(ID)->GetDC();
HDC hdc=pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
int iw=img->width;
int ih=img->height;
int rw=rect.right-rect.left;
int rh=rect.bottom-rect.top;
int tx=(int)(rw-iw)/2;
int ty=(int)(rh-iw)/2;
SetRect(rect,0,0,iw,ih);
CvvImage cimg;
cimg.CopyOf(img);
cimg.DrawToHDC(hdc,&rect);
ReleaseDC(pDC);
}
void RotationDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
CDialog::OnPaint();
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
int RotationDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
return 0;
}
void RotationDialog::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: 在此处添加消息处理程序代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
void RotationDialog::OnChildActivate()
{
CDialog::OnChildActivate();
// TODO: 在此处添加消息处理程序代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
------解决方案--------------------
试试OnActivate()。
------解决方案--------------------
OnActivte也是第一次不画?
别的应该没有更合适的地方了吧?
试试OnInitDialog的这一一行CDialog::OnInitDialog();的后面吧。
问题如下:为了在Domodal之后的窗口立刻在pictureBox控件绘图,重载了数个函数进行绘图操作,皆未绘制成功。请问要实现这个功能应该在哪个函数中添加操作?
在新窗口重载了OnPaint(),OnCreate(LPCREATESTRUCT lpCreateStruct),OnShowWindow(BOOL bShow, UINT nStatus)
,OnChildActivate()这几个函数。
结果都没有在Domodal出来的新窗口没有在pictureBox中绘制图片。
以下是代码:
DrawImage2和DrawImage1已经在OnInitDialog初始化。
IDC_PICTURE88和IDC_PICTURE8是俩个不同的pictureBox的控件ID。
void RotationDialog::ShowImage(IplImage* img, UINT ID) //显示图片的函数
{
//如果有用CImage类的显示图片的函数,请给一个。
//这个图片显示函数是基于opencv的图像显示类构建的,在创建完之后的其他地方能显示图片中能正常绘制。
CDC*pDC=GetDlgItem(ID)->GetDC();
HDC hdc=pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
int iw=img->width;
int ih=img->height;
int rw=rect.right-rect.left;
int rh=rect.bottom-rect.top;
int tx=(int)(rw-iw)/2;
int ty=(int)(rh-iw)/2;
SetRect(rect,0,0,iw,ih);
CvvImage cimg;
cimg.CopyOf(img);
cimg.DrawToHDC(hdc,&rect);
ReleaseDC(pDC);
}
void RotationDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
CDialog::OnPaint();
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
int RotationDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
return 0;
}
void RotationDialog::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: 在此处添加消息处理程序代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
void RotationDialog::OnChildActivate()
{
CDialog::OnChildActivate();
// TODO: 在此处添加消息处理程序代码
ShowImage(DrawImage2,IDC_PICTURE88);
ShowImage(DrawImage1,IDC_PICTURE8);
}
------解决方案--------------------
试试OnActivate()。
------解决方案--------------------
OnActivte也是第一次不画?
别的应该没有更合适的地方了吧?
试试OnInitDialog的这一一行CDialog::OnInitDialog();的后面吧。