点の描画について(win32API)
win32APIでウィンドウに点を描画するプログラムを作ったのですが、SetPixel関数で点を描画しようとすると、特定のx座標に点が描画されません。線は普通に描画されるのですが・・・。
/*ソース*/
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wp, LPARAM lp) {
static HDC hdc;
static PAINTSTRUCT ps;
switch(Msg) {
case WM_PAINT: //【ここです!】
hdc = BeginPaint(hwnd, &ps);
MoveToEx(hdc , 0 , 300 , NULL); //比較のため線を引く準備
LineTo(hdc,1200,300); //比較のため線を引く
for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 100, RGB(0,200,100) ) ;
for( int j = 1000; j > 0 ; j-- )SetPixel( hdc, j, 200, RGB(0,200,100) ) ;
//ここで点を描画
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY: //終了処理
PostQuitMessage(0);
return 0;
}
return DefWindowProc( hwnd, Msg, wp, lp );
}
//↓ごく普通のWinMainです。無視してください。
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hwnd = CreateWindow(
TEXT("KITTY") , TEXT("Kitty on your lap") ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hwnd == NULL) return -1;
while( GetMessage(&msg , NULL , 0 , 0) ) DispatchMessage(&msg);
return msg.wParam;
}
解決策を模索するもうまくいかず・・・どうか回答よろしくお願いします。
お礼
やはりダブルバッファが一番きれいにいきそうですね。 ご回答ありがとうございました。