Gdi+显示问题

kang92 2016-07-25 02:35:37
在窗口中显示png无法成功,代码如下
#include "StdAfx.h"
#include "images.h"

images::images(void)
{
init();
}

images::images(HWND parent):
baseControl(parent)
{
init();
}

images::~images(void)
{
}

void images::init()
{
mImagePath = _T("2.png");
HINSTANCE hInst = AfxGetInstanceHandle();

WNDCLASS wndclass; //窗体类
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wndclass.hCursor = LoadCursor( 0, IDC_HAND );
wndclass.hIcon = LoadIcon( 0, IDI_INFORMATION );
wndclass.hInstance = AfxGetInstanceHandle();
wndclass.lpfnWndProc = MyWindowProc;
wndclass.lpszClassName = TEXT("hg");
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW ; // 指定窗体风格
//注册类
if (!RegisterClass( &wndclass ) )
{
ShowLog(Priority::WARN, "image window class register error.");
}
//创建窗体
mHwnd = CreateWindow( TEXT("hg"), TEXT("Helloworldhhh"), WS_CHILD, 0, 0, 300, 600, mParentWindow,NULL,AfxGetInstanceHandle(), NULL );
if ( !mHwnd)
{
DWORD lastError = GetLastError();
ShowLog(Priority::WARN, "image window create error, error code : %d.", lastError);
}
}

LRESULT CALLBACK images::MyWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
images *image = reinterpret_cast<images *>(wParam);
PAINTSTRUCT ps;
HDC hdc;

switch(uMsg)
{
case WM_CONTROL_SHOW:
if (image)
{
ShowLog(Priority::NOTICE, "image wm_control_show.");
image->Show();
}

break;
case WM_PAINT:
{
ShowLog(Priority::NOTICE, "image wm_paint.");
if (image)
{
image->Show();
RedrawWindow(hwnd,NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW);
}
else
{
hdc = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
//return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
}
break;
default:
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}

return 0;
}

void images::Show()
{
PAINTSTRUCT ps; // 点结构
HDC hdc; // DC句柄
hdc = BeginPaint (mHwnd , &ps); // 获得DC句柄,开始绘制,其中hWnd为窗口句柄

RECT rc;
GetClientRect(mHwnd,&rc);
Graphics graphics( hdc);
Image image(mImagePath.c_str(), FALSE);
graphics.DrawImage(&image, 0, 0, rc.right, rc.bottom); //绘制背景
EndPaint(mHwnd, &ps) ; // 绘制结束

ShowLog(Priority::NOTICE, "Image Show Finish.");
}
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-26
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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