【SDK编程】指教
源代码:
#include <windows.h>#include "resource.h"HINSTANCE hThisInstance;LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){ HDC hdc; PAINTSTRUCT ps; HBITMAP bitmap,OldBmp; HDC hMemDC; RECT rc; switch(message) { case WM_CREATE: return 0; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); hMemDC=CreateCompatibleDC(hdc); bitmap=LoadBitmap(hThisInstance,MAKEINTRESOURCE(IDB_BITMAP1)); OldBmp=(HBITMAP)SelectObject(hMemDC,(HGDIOBJ)bitmap); GetWindowRect(hWnd,&rc); BitBlt( hdc, 0, 0, rc.left-rc.right, rc.top-rc.bottom, hMemDC, 0, 0, SRCCOPY ); SelectObject(hMemDC,(HGDIOBJ)OldBmp); DeleteDC(hMemDC); EndPaint(hWnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,message,wParam,lParam);}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ hThisInstance=hInstance; HWND hWnd; MSG msg; WNDCLASS c; c.cbClsExtra=0; c.cbWndExtra=0; c.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); c.hCursor=LoadCursor(NULL,IDC_ARROW); c.hIcon=LoadIcon(NULL,IDI_APPLICATION); c.hInstance=hInstance; c.lpfnWndProc=WndProc; c.lpszClassName="Frame"; c.lpszMenuName=NULL; c.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&c); hWnd=CreateWindow( "Frame", "Frame", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,hWnd,0,0)&&msg.message!=WM_QUIT) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}
BitBlt( hdc, 0, 0, rc.right-rc.left, // 这样写 rc.bottom-rc.top, // 这样写 hMemDC, 0, 0, SRCCOPY );
[解决办法]
你那样写宽高成负数了,这样图像就画到屏幕外面了,屏幕坐标以左上角为原点(0,0),往右为X轴正方向,向下为Y轴正方向。
----------------------------------------
函数原型
BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);
编辑本段
参数
hdcDest:指向目标设备环境的句柄。
nXDest:指定目标矩形区域左上角的X轴逻辑坐标。
nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源和目标矩形区域的逻辑宽度。
nHeight:指定源和目标矩形区域的逻辑高度。
hdcSrc:指向源设备环境的句柄。
nXSrc:指定源矩形区域左上角的X轴逻辑坐标。
nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。
dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
下面列出了一些常见的光栅操作代码:
BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
DSTINVERT:表示使目标矩形区域颜色取反。
MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。