- 締切済み
色つきの円を描きたいです
色つきの円を描きたいです。 円の中心まで色を付きたいです。 出来ますか? おしえてください! お願いします。 この前教えたもらった方法でテストプログラム を作りましたが、実行不可能です。 絵を描くのが初めてですから、 サンプルを欲しいです。 お願いします。 #include <stdio.h> #include <string.h> #include <afxwin.h> void main( void ) { int X,Y,R; X=10; Y=20; R =100; Ellipse(X-R,Y-R, X+R, Y+R); }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- JaritenCat
- ベストアンサー率37% (122/322)
とりあえずサンプルです。 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; }
- sha-girl
- ベストアンサー率52% (430/816)
>LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です コンソールプログラムでコンパイルしようとしているからです。 プロジェクトオプションのところで /subsystem:console を /subsystem:windows に変えてください。
お礼
ご回答、ありがとうございます。 うまくいけません。
- sha-girl
- ベストアンサー率52% (430/816)
Ellipseはwindows.hが必要です。#include <windows.h> ウインドウのサンプルならあります。 「猫でもわかるプログラミング」が有名です。 http://www.kumei.ne.jp/c_lang/sdk/sdk_25.htm http://www.doumo.jp/postgretips/tips.jsp?tips=13 のソースのswitch( message )の下に case WM_PAINT: { PAINTSTRUCT ps; int X,Y,R; HDC hDC = BeginPaint(hWnd,&ps); X=10; Y=20; R =100; Ellipse( hDC,X-R,Y-R, X+R, Y+R); } break; を追加してください。 使っているコンパイラはなんだかわからないですが BCCなら http://www.kumei.ne.jp/c_lang/bcc/index.html を参考にしてください。 ちなみにVC++も無償のものがあります。 http://msdn.microsoft.com/visualc/vctoolkit2003/
お礼
ご回答、ありがとうございます。 早速sampleを使ってみましたが、 VC++ 6.00を使っています。 下記のエラーがでました。 ************** リンク中... LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/testofcircle.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー ****************** なぜですか? 教えてください! お願いします。
お礼
ご回答、ありがとうございます。 コンパイルして、エラーが下記の通りです。 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 どうやって治ります? 教えてください! お願いします。