俺想将屏幕显示在窗口的客户区内,可是一运行就只有一个黑窗口,由于对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;
}
//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;
}
√ hdc_screen =::GetDC(0);