俺想将屏幕显示在窗口的客户区内,可是一运行就只有一个黑窗口,由于对gdi编程不熟悉。所以请高手们指教,最好补齐代码:...
//DlgProc.cpp
//用于实现窗口过程
#include "DlgProc.h"INT_PTR CALLBACK DialogProc(          
    HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
HDC hdc, hdcMem, hdc_screen;
HBITMAP hBmp;
PAINTSTRUCT ps;
RECT rc;
int x, y; switch (uMsg)
{
case WM_INITDIALOG:
break; case WM_PAINT:
hdc_screen = CreateDC(L"DISPLAY", NULL, NULL, NULL);  //获取DC
//hdc = BeginPaint(hwndDlg, &ps); //创建内存DC
hdcMem = CreateCompatibleDC(hdc_screen); //获取位图句柄
hBmp = CreateCompatibleBitmap(
hdc_screen, 
GetDeviceCaps(hdc_screen, HORZRES), 
GetDeviceCaps(hdc_screen, VERTRES)
); //将对象放到DC中
SelectObject(hdcMem, hBmp); //获取客户区
GetClientRect(hwndDlg, &rc);
x = rc.right - rc.left;
y = rc.bottom - rc.top; //显示并屏幕显示在客户区内
StretchBlt(hdc_screen, 0, 0, x, y, hdcMem, 0, 0, GetDeviceCaps(hdc_screen, HORZRES), 
GetDeviceCaps(hdc_screen, VERTRES), SRCCOPY); DeleteDC(hdc_screen);
EndPaint(hwndDlg, &ps); break; case WM_ERASEBKGND: 
return 1; case WM_SIZE:
GetClientRect(hwndDlg, &rc);
InvalidateRect(hwndDlg, &rc, TRUE);
break; case WM_TIMER:
break; case WM_CLOSE:
EndDialog(hwndDlg, 0xff);
break; default: break;
} return 0;  
}