GetClipboardData獲得剪貼板上的內容
CloseClipboard關閉剪貼板
BitBlt繪圖
#include <windows.h>
#include <tchar.h>
#define ID_DRAW 50
HMENU CreateMenuBar() {
HMENU hMenu = CreateMenu();
AppendMenu(hMenu, MF_STRING, ID_DRAW, _T("Draw"));
return hMenu;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
HANDLE hBit;
HDC hDC, hMemDC;
RECT rc;
switch (uMsg) {
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_DRAW:
if (OpenClipboard(hwnd)) {
hBit = GetClipboardData(CF_BITMAP);
CloseClipboard();
if (hBit) {
hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(NULL);
hBit = SelectObject(hMemDC, hBit);
GetClientRect(hwnd, &rc);
BitBlt(hDC, 0, 0, rc.right, rc.bottom, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hBit);
DeleteDC(hMemDC);
ReleaseDC(hwnd, hDC);
break;
}
}
MessageBox(hwnd, _T("Invalid data."), _T("Error"), MB_ICONERROR);
}
break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
INT WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nCmdShow) {
MSG msg;
WNDCLASS wnd = { 0 };
wnd.lpfnWndProc = WndProc;
wnd.hInstance = hInstance;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hbrBackground = (HBRUSH)COLOR_WINDOW;
wnd.lpszClassName = _T("test");
RegisterClass(&wnd);
if (!CreateWindow(_T("test"), _T("test"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, CreateMenuBar(), hInstance, NULL)) return 0;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}