winapi – 关于Windows GDI的困惑.新手程序员
发布时间:2020-12-14 03:53:16 所属栏目:Windows 来源:网络整理
导读:我是一名中国学生,这是我在国外论坛上提出的第一个问题. 我写了两个程序,一个可以正常运行,但另一个程序失败了. 这是正常的: case WM_PAINT: hdc = BeginPaint (hwnd,ps) ; if(fIsTime) ShowTime(hdc,st); else ShowDate(hdc,st); EndPaint (hwnd,ps) ; ret
我是一名中国学生,这是我在国外论坛上提出的第一个问题.
我写了两个程序,一个可以正常运行,但另一个程序失败了. 这是正常的: case WM_PAINT: hdc = BeginPaint (hwnd,&ps) ; if(fIsTime) ShowTime(hdc,&st); else ShowDate(hdc,&st); EndPaint (hwnd,&ps) ; return 0 ; 这是失败的一个: case WM_PAINT: hdc = BeginPaint (hwnd,&ps) ; hdcMem = ::CreateCompatibleDC(hdc); hBitmap = ::CreateCompatibleBitmap(hdc,cxClient,cyClient); ::SelectObject(hdcMem,hBitmap); if(fIsTime) ShowTime(hdcMem,&st); else ShowDate(hdcMem,&st); ::BitBlt(hdcMem,cyClient,hdc,SRCCOPY); ::DeleteObject(hBitmap); ::DeleteDC(hdcMem); EndPaint (hwnd,&ps) ; return 0 ; 两个代码之间的唯一区别是WM_Paint代码块,后者无法显示任何内容.我对后一个代码中的错误位置感到困惑? 解决方法
您最大的问题是您为BitBlt调用交换了源和目标DC.第一个参数应该是目标,而不是源.
此外,将位图设置为DC时,必须记住返回给您的旧值,并在完成后将其还原. 请尝试以下方法: hdc = BeginPaint (hwnd,&ps) ; hdcMem = ::CreateCompatibleDC(hdc); hBitmap = ::CreateCompatibleBitmap(hdc,cyClient); hbmpOld = ::SelectObject(hdcMem,hBitmap); if(fIsTime) ShowTime(hdcMem,&st); else ShowDate(hdcMem,&st); ::BitBlt(hdc,hdcMem,SRCCOPY); ::SelectObject(hdcMem,hbmpOld); ::DeleteObject(hBitmap); ::DeleteDC(hdcMem); EndPaint (hwnd,&ps) ; return 0 ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-7 – 如何签署我的驱动,所以它会安装在Windows 7 6
- 如何在Windows操作系统中配置或安装GEARMAN?
- windows-7 – 使用VHD作为数据存储位置?
- windows-server-2008 – 在Server 2008 SP2上读取慢速SSD
- Windows网络上的补丁管理和系统清单?
- windows – Delphi 7可以通过OLE Variant传递Int64值吗?
- windows-phone-7 – 学习xaml for windows phone 7的教程
- remote – 如何在Windows上使用IPMI?
- windows-phone-7 – 市场错误报告中的System.ComponentMode
- Windows网络性能(SMB / CIFS)