Windows上にて、C/C++のちょっとしたプログラムで、
実行結果を視覚的にみたい時に、直接デスクトップに描画すると手っ取り早い。
デスクトップはウィンドウハンドル(HWND)を持っているので、
あとはそれを元にデバイスコンテキストハンドル(HDC)を取得してやれば、
それを使って描画できる。
下の例は、再描画処理は行なっていないので、ウィンドウが重なると描画は消えてしまう。
あくまで、簡易的に描画結果を得る方法。
// DrawOnDesktop.cpp
// デスクトップに直接描画
// 以下の#pragma非対応のコンパイラの場合、手動でライブラリをリンクすること
#pragma comment(lib, "user32.lib") // GetDesktopWindow, GetDC, ReleaseDC API
#pragma comment(lib, "gdi32.lib") // 各種描画API
#include <windows.h>
int main(int argc, char* argv[])
{
// デスクトップのウィンドウハンドル、
// デバイスコンテキストハンドル取得
HWND desktop_hwnd = GetDesktopWindow();
HDC desktop_hdc = GetDC(desktop_hwnd);
//
// 描画処理
//
SelectObject(desktop_hdc, GetStockObject(BLACK_PEN));
char message[] = "Hello, World";
TextOut(desktop_hdc, 150, 150, message, strlen(message));
HPEN hpen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
HBRUSH hbrush = CreateSolidBrush(RGB(0, 255, 127));
HPEN oldpen = (HPEN)SelectObject(desktop_hdc, (HGDIOBJ*)hpen);
HBRUSH oldbrush = (HBRUSH)SelectObject(desktop_hdc, (HGDIOBJ*)hbrush);
Rectangle(desktop_hdc, 200, 200, 300, 300);
SelectObject(desktop_hdc, oldpen);
SelectObject(desktop_hdc, oldbrush);
DeleteObject(hpen);
DeleteObject(hbrush);
// デバイスコンテキストハンドル開放
ReleaseDC(desktop_hwnd, desktop_hdc);
return 0;
}