掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
画面更新 (ID:53118)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
SELNAさんのアドバイスを受けて、試してみましたが、うまく動作しないのです。 352×288ピクセルに青を連続でちらつきが無く表示しないのですが、 青い画面がでません。。。 下に、ソースを記載しますので、どこが悪いか見て頂けませんでしょうか? よろしくおねがいします。 ********************** #include "stdafx.h" HINSTANCE hInst; // 現在のインスタンス HWND hWnd; // Main Window Handle HDC hdcMem; // Memory DC LPBYTE lpBMP; // BITMAP表示用 Bit値 DWORD tm=0; // Wait用変数 HDC hBackMemDC; HBITMAP hBackBitmap; ATOM MyRegisterClass( HINSTANCE hInstance ); BOOL InitInstance( HINSTANCE, int ); LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM ); static BitMapConfig(void); //BITMAP表示用の定義 static MainLoop(void); //MainLoop int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; MyRegisterClass( hInstance ); if( !InitInstance( hInstance, nCmdShow ) ) { return FALSE; } BitMapConfig(); //BITMAP表示用の定義 while (1) { // MainLoop if (PeekMessage (&msg,NULL,0,0,PM_NOREMOVE)) { if (!GetMessage (&msg,NULL,0,0)) // Message処理 { return msg.wParam ; } TranslateMessage(&msg); DispatchMessage(&msg); } else { MainLoop(); } } return msg.wParam; } ////////////////////////// // BITMAP表示用の定義 // ////////////////////////// BitMapConfig(void) { LPBITMAPINFO lpDIB; HDC hdc; // DC HBITMAP hBMP; // DIB Handle lpDIB=(LPBITMAPINFO)GlobalAlloc(GPTR,352*288*3);// DIBヘッダ用メモリ確保 lpDIB->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); lpDIB->bmiHeader.biWidth=352; lpDIB->bmiHeader.biHeight=288; lpDIB->bmiHeader.biPlanes=1; lpDIB->bmiHeader.biBitCount=24; lpDIB->bmiHeader.biCompression=BI_RGB; lpDIB->bmiHeader.biSizeImage=0; lpDIB->bmiHeader.biXPelsPerMeter=0; lpDIB->bmiHeader.biYPelsPerMeter=0; lpDIB->bmiHeader.biClrUsed=0; lpDIB->bmiHeader.biClrImportant=0; hdc=GetDC(hWnd); // WindowのDC(Deviceコンテキスト)を取得 // DIB とウインドウのDC からDIBSection を作成 hBMP=CreateDIBSection(hdc,lpDIB,DIB_RGB_COLORS,(void **)&lpBMP,NULL,0); hdcMem=CreateCompatibleDC(hdc); // Memory DC を作成 SelectObject(hdcMem,hBMP); /* メモリDC にビットマップを選択 */ hBackBitmap = CreateCompatibleBitmap(hdc, 352, 288); hBackMemDC = CreateCompatibleDC(hdc); SelectObject(hBackMemDC, hBackBitmap); ReleaseDC(hWnd,hdc); return 0; } //////////////// // Main-Loop // //////////////// MainLoop(void) { int Yline; int Xline; int i=1; RECT rt; if (GetTickCount()>tm+500) { tm=GetTickCount(); } else { return 0; } for (Yline=1;Yline<=288;Yline++) { for (Xline=1;Xline<=352;Xline++) { lpBMP[(i-1)*3+0]=255; lpBMP[(i-1)*3+1]=0; lpBMP[(i-1)*3+2]=0; i++; } } BitBlt(hBackMemDC,0,0,352,288,hdcMem, 0, 0, SRCCOPY); InvalidateRect(hWnd,&rt,TRUE); UpdateWindow (hWnd); // 再描画 return 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; static int x,y; HDC hdc; switch( message ) { case WM_CREATE: return 0; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); return 0; case WM_PAINT: hdc = BeginPaint (hWnd, &ps); BeginPaint( hWnd, &ps ); BitBlt(ps.hdc, 0, 0, 352, 288, hBackMemDC, 0, 0, SRCCOPY ); EndPaint( hWnd, &ps ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; } ATOM MyRegisterClass( HINSTANCE hInstance ) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, IDI_WINLOGO); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+5); wcex.lpszMenuName = NULL; wcex.lpszClassName = "Test"; wcex.hIconSm = LoadIcon(wcex.hInstance, NULL); return RegisterClassEx( &wcex ); } BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { hInst = hInstance; // グローバル変数にインスタンス ハンドルを保存します hWnd = CreateWindow("Test", "TITLE", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, // 左のWS_*でWindowSize変更禁止 CW_USEDEFAULT, 0, 1000, 800, NULL, NULL, hInstance, NULL); if( !hWnd ) { return FALSE; } ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); return TRUE; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.