1

この記事http://msdn.microsoft.com/en-us/library/bb384843.aspxを使用して、Visual Studio 2010 で win32 アプリケーションを作成しました 。その後、このプロジェクトに cpp ファイルを追加し、グラフィック チュートリアルから取得したコード スニペットを貼り付けます。このコードを以下に示します。

このソリューションをコンパイルするには、プロジェクトのプロパティで文字セットを Use multi byte character set に変更する必要があります。

その後、truck.bmp という名前の画像をプロジェクト フォルダーに挿入しました。

この写真を使ったとき

ここに画像の説明を入力

このエラーメッセージが表示されます

ビットマップがロードされていません - プログラムによると hbitmap が null であるため、ファイル 'truck.bmp' がプロジェクト フォルダーに存在することを確認してください。

しかし、この写真を使用したとき

ここに画像の説明を入力

それは正しく読み込まれます。プログラムは LoadImage 関数を使用して画像を読み込みます。

これら 2 つの画像が同じ機能に対して異なる動作をする理由がわかりません。誰かがその理由を説明できますか。私の質問の大きな画像で申し訳ありません

/* to demonstrate loading and displaying of bitmaps */
  #include < windows.h >
  LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsgId, WPARAM wParam,
                        LPARAM lParam);

  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow)
{
static char name[]="Bitmap Display";

HWND hWnd;
MSG msg;
WNDCLASS wndClass;
wndClass.style=0;
wndClass.lpfnWndProc=WindowProc;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor=LoadCursor(NULL, IDC_ARROW);
wndClass.hInstance=hInstance;
wndClass.lpszMenuName=NULL;
wndClass.lpszClassName=name;

if(RegisterClass(&wndClass) == 0)
{
   MessageBox(0, "The Window is not registered", "Message", MB_OK);
   return 0;
}

    hWnd=CreateWindow(name, name, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,         CW_USEDEFAULT,  CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

if(hWnd==0)
{
   return 0;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg, NULL, 0, 0))
{
   TranslateMessage(&msg);
   DispatchMessage(&msg);
 }
 msg.wParam;
  }

   LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsgId, WPARAM wParam, LPARAM lParam)
 {
HBITMAP hbitmap;
BITMAP bitmap;
HDC hdc, hmemdc;

switch(uMsgId)
{
case WM_PAINT:
 PAINTSTRUCT paintStruct;
 hdc= BeginPaint(hWnd, &paintStruct);

 /* loading the bitmap from a BMP file (ensure the file is present under the    project folder) */
 hbitmap= (HBITMAP)LoadImage(NULL, "truck.bmp",IMAGE_BITMAP, 0,0, LR_LOADFROMFILE    );

 if(hbitmap == NULL)
 {
    MessageBox(NULL, "Bitmap not loaded- Ensure the file 'truck.bmp' is present in the project folder","Error",MB_OK);
 }

 hmemdc= CreateCompatibleDC(hdc);
 SelectObject(hmemdc, hbitmap);
 GetObject(hbitmap, sizeof(BITMAP), &bitmap);

 /* displaying the bitmap at certain x,y position on the window client area */
 BitBlt(hdc, 0, 0, bitmap.bmWidth,bitmap.bmHeight, hmemdc,0,0, SRCCOPY);

 /* displaying the bitmap with scaled dimensions at certain x,y position on the window client area */
 StretchBlt(hdc, bitmap.bmWidth+5, 0, bitmap.bmWidth*2,bitmap.bmHeight*2,  hmemdc,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

 DeleteDC(hmemdc);
 DeleteObject(hbitmap);
 EndPaint(hWnd, &paintStruct);
 return 0;

case WM_DESTROY:
 PostQuitMessage(0);
 return 0;
default:
 return DefWindowProc(hWnd, uMsgId, wParam, lParam);
}
  }
4

0 に答える 0