とりあえずサンプルです。
BCCで-Wオプションでコンパイルしてみました。VC++でもwindows用の設定にすればコンパイルできると思います。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void graph(HWND);
int circle(HDC, int, int, int, int, int, int);
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) {
MSG msg; char szClassName[] = "grph02"; WNDCLASS wc; HWND hWnd;
if (!hPrevInst) {
wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc;
wc.cbClsExtra = wc.cbWndExtra = 0; wc.hInstance = hCurInst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL;
wc.lpszClassName = (LPCSTR)szClassName;
if (!RegisterClass(&wc)) return FALSE;
}
hWnd = CreateWindow(
szClassName, "グラフィック", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hCurInst, NULL);
if (!hWnd) return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg); DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
int id;
switch (msg) {
case WM_PAINT:
graph(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0L;
}
/* グラフィック描画 */
void graph(HWND hWnd) {
HDC hdc; PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
circle(hdc, 128,255,50, 100,150,80);
EndPaint(hWnd, &ps);
}
/* 塗りつぶしの円 */
int circle(HDC hdc, int cr, int cg, int cb, int x, int y, int r) {
HPEN hPen, hOldPen;
HBRUSH hBrush, hOldBrush;
/* ペン */
hPen = CreatePen(PS_SOLID, 1, RGB(cr, cg, cb));
hOldPen = SelectObject(hdc, hPen);
/* ブラシ */
hBrush = CreateSolidBrush(RGB(cr, cg, cb));
hOldBrush = SelectObject(hdc, hBrush);
/* 円 */
Ellipse(hdc, x-r, y-r, x+r, y+r);
/* あとしまつ */
SelectObject(hdc, hOldPen);
DeleteObject(hBrush);
SelectObject(hdc, hOldBrush);
DeleteObject(hPen);
return 0;
}
お礼
ご回答、ありがとうございます。 コンパイルして、エラーが下記の通りです。 testofcircle.cpp c:\documents and settings\ryu\my documents\fs\temp\testofcircle.cpp(12) : error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照) 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 c:\documents and settings\ryu\my documents\fs\temp\testofcircle.cpp(57) : error C2440: '=' : 'void *' から 'struct HPEN__ *' に変換することはできません。(新しい動作 ; ヘルプを参照) 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 c:\documents and settings\ryu\my documents\fs\temp\testofcircle.cpp(60) : error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照) 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 cl.exe の実行エラー testofcircle.exe - エラー 3、警告 0 どうやって治ります? 教えてください! お願いします。