死都画不出来,怎么回事

从来不用 2018-05-15 04:10:02

void AddRobotDialog::OnPaint()
{
CPaintDC dc(this); // d
UpdateWindow();
CClientDC *pDC = new CClientDC(GetDlgItem(IDC_HEAD_PIC));
CRect rect;
GetDlgItem(IDC_HEAD_PIC)->GetWindowRect(&rect);
Graphics graphics(pDC->m_hDC);
wchar_t wcstring[256];
MultiByteToWideChar(CP_ACP, 0, m_headPath, -1, wcstring, 256);
Image image(wcstring);
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());

delete pDC;


}
...全文
689 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
从来不用 2018-05-28
  • 打赏
  • 举报
回复
没搞过mfc,第一次使用这个做个小工具,谢谢!
从来不用 2018-05-28
  • 打赏
  • 举报
回复
这个问题奇怪点就在我开始时画出来的,加点功能后就画不出来,再加上GDI+初始化后又画出来了,好像是这个GDI+的初始化 在某些情况下必须的,某些情况下不必须一样
silencenet 2018-05-26
  • 打赏
  • 举报
回复
我前段时间好像是遇到过,是想为了省事,但最后好像错了 gdi+好像是只能在内存DC上画,也就是说要创建兼容dc,创建兼容位图,关联gdi+与内存dc 等等。。。 最后画到目标dc去 当时也是测试,并不完全确定这个结果,你可以尝试下增加这些步聚
hhhh63 2018-05-16
  • 打赏
  • 举报
回复
直接画到主窗口上的指定位置就行。
wzaen 2018-05-16
  • 打赏
  • 举报
回复
试试在IDC_HEAD_PIC窗口的onpaint里面画~
schlafenhamster 2018-05-15
  • 打赏
  • 举报
回复
static Image* FromFile( IN const WCHAR* filename, IN BOOL useEmbeddedColorManagement = FALSE ); 如 m_pImage = Image::FromFile(L"素材天下1077.jpg"); //9000 , 6364
从来不用 2018-05-15
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
1 OnPaint() 会给 所有控件 发 Invalidate 2 OnPaint() 绘制 对话框 本身, 3 OnPaint() 退出 后 ,各控件 绘制 自己 。 你把 控件的 绘制 放 2,3 之间, 控件的 OnPaint() 会 把 你 的 绘制 覆盖掉 !应该 先 让 控件 窗口 有效: // draw Icon m_IconPic.ValidateRect(0);//or UpdateWindow(); CClientDC dcPic(CWnd::FromHandle(m_IconPic.m_hWnd)); // get pos CRect rcPic; m_IconPic.GetClientRect(rcPic);// 0,0,48,48 CRect rcPicW=rcPic; m_IconPic.GetWindowRect(rcPicW);// ScreenToClient(&rcPicW); // backgroud dcPic.SetBrushOrg(-rcPicW.left,-rcPicW.top);// {top=362 bottom=410 left=196 right=244} dcPic.FillRect(rcPic,&m_brDlg); // draw icon HICON hIcon=m_IconPic.GetIcon(); dcPic.DrawIcon(0, 0, hIcon);
刚刚调试发现 Image image(wcstring); 这句执行后,里面的变量是空的,GetWidth() = 0; 我指定的是绝对路径
schlafenhamster 2018-05-15
  • 打赏
  • 举报
回复
注意 m_IconPic.ValidateRect(0);//or UpdateWindow();
schlafenhamster 2018-05-15
  • 打赏
  • 举报
回复
1 OnPaint() 会给 所有控件 发 Invalidate 2 OnPaint() 绘制 对话框 本身, 3 OnPaint() 退出 后 ,各控件 绘制 自己 。 你把 控件的 绘制 放 2,3 之间, 控件的 OnPaint() 会 把 你 的 绘制 覆盖掉 !应该 先 让 控件 窗口 有效: // draw Icon m_IconPic.ValidateRect(0);//or UpdateWindow(); CClientDC dcPic(CWnd::FromHandle(m_IconPic.m_hWnd)); // get pos CRect rcPic; m_IconPic.GetClientRect(rcPic);// 0,0,48,48 CRect rcPicW=rcPic; m_IconPic.GetWindowRect(rcPicW);// ScreenToClient(&rcPicW); // backgroud dcPic.SetBrushOrg(-rcPicW.left,-rcPicW.top);// {top=362 bottom=410 left=196 right=244} dcPic.FillRect(rcPic,&m_brDlg); // draw icon HICON hIcon=m_IconPic.GetIcon(); dcPic.DrawIcon(0, 0, hIcon);
从来不用 2018-05-15
  • 打赏
  • 举报
回复
IDC_HEAD_PIC 这个是一个picture control空间的id

16,471

社区成员

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

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

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