首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口编程接口-- LoadImage

窗口编程接口-- LoadImage
EN

Stack Overflow用户
提问于 2015-10-09 21:13:35
回答 1查看 214关注 0票数 0

我正在学习window API编程。然而,我被卡在加载图像和显示在窗口上。

代码语言:javascript
复制
#include <windows.h>
#include <stdio.h>

#define wname "mywin"

LRESULT CALLBACK WndProc(HWND h,UINT im,WPARAM wp,LPARAM lp);

int APIENTRY  WinMain(HINSTANCE his, HINSTANCE prev,LPSTR cmd, int cshow)
{        

    WNDCLASS wc;

    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.lpszMenuName=NULL;
    wc.style=CS_HREDRAW | CS_VREDRAW;

    wc.hInstance = his;                  
    wc.lpszClassName = wname;           
    wc.lpfnWndProc = (WNDPROC)WndProc;    

    RegisterClass(&wc);

    HWND h = CreateWindow(wname, wname, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, (HMENU) NULL, his, NULL );

    ShowWindow(h, cshow);

    MSG Message;    
    while(GetMessage(&Message,0,0,0)) 
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }

}

LRESULT CALLBACK WndProc(HWND h, UINT im, WPARAM wp, LPARAM lp)
{
    HBITMAP static hbm;
    HDC static mdc;
    BITMAP static bm;

    switch(im)
    {
        case WM_CREATE: 
        {        
            hbm = (HBITMAP) LoadImage(NULL, "../img/1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);   
            GetObject(hbm, sizeof(bm), &bm);

            if(!hbm)
            {
                MessageBox(h, "Error loading bitmap", "msg", MB_OK);  
            }

            break;    
        }

        case WM_PAINT:
        {
            HDC hdc = GetDC(h);
            mdc = CreateCompatibleDC(hdc);    
            SelectObject(mdc, hbm);  

            BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, mdc, 0, 0, SRCCOPY);

            break;        
         }
}

我试过这个代码。没有语法错误,但输出很奇怪。图片出现,但没有窗口,程序停止。我想问题出在'LRESULT CALLBACK WndProc‘中的WM_CREATE部分,但是找不出到底是哪里出了问题。救命!(WinMain没问题,这里没问题)

EN

回答 1

Stack Overflow用户

发布于 2015-10-09 21:33:50

您似乎没有WndProc的返回值,并且可能Win32消息在默认情况下不会被处理。

(在case WM_PAINT之后):

代码语言:javascript
复制
    case WM_DESTROY:
      PostQuitMessage(0);
      break;

    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33039249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档