zzblydia 2015-08-06 06:13 采纳率: 20%
浏览 2655
已结题

windows编程 在一个窗口上加载一个位图图片

希望前辈们能给个demo程序。或者最基本的窗口上加载一个位图图片就好,加载位图时用的LoadImage
初学windows编程,不太懂上下文设备,希望大神能给个例程,让我学习。

  • 写回答

2条回答 默认 最新

  • zzblydia 2015-08-06 06:21
    关注

    #include
    #include "resource.h"

    LRESULT CALLBACK WndProc1(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
    {
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;

    switch(message)
    {
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&ps);
        GetClientRect(hwnd,&rect);
        DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
        EndPaint (hwnd, &ps) ;
        return 0 ;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd,message,wParam,IParam);
    

    }

    LRESULT CALLBACK WndProc2(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
    {
    RECT rcDialog;
    HBITMAP LoadBmp;
    static BITMAP s_bm;
    static HDC s_hdcMem;
    ////================================================================================
    switch(message)
    {
    case WM_PAINT:
    LoadBmp = (HBITMAP)LoadImageA(NULL, "005.bmp",IMAGE_BITMAP,80,29,LR_DEFAULTCOLOR);

            // 将背影图片放入HDC - s_hdcMem
            HDC        hdc;
            hdc = GetDC(hwnd);
            s_hdcMem = CreateCompatibleDC(hdc);
            SelectObject(s_hdcMem, LoadBmp);
            StretchBlt(hdc, 0, 0, 80, 29, hdc, 0, 0, 80, 29, SRCCOPY);
            ReleaseDC(hwnd, hdc);
            // 得到位图信息
            GetObject(LoadBmp, sizeof(s_bm), &s_bm);                
            return 0 ;
    
        case WM_CTLCOLORDLG:
        GetClientRect(hwnd, &rcDialog);
        //通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰
        SetStretchBltMode((HDC)wParam, COLORONCOLOR);
        StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);   
        return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
    
    
        case WM_DESTROY:
        PostQuitMessage(0);
        return 0 ;
    

    ////========================================================================

    }return DefWindowProc(hwnd,message,wParam,IParam);
    

    }

    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
    {
    static TCHAR szAppName1[]=TEXT("HelloWin");
    static TCHAR szAppName2[]=TEXT("hello");
    HWND hwnd1;
    HWND hwnd2;
    MSG msg;

    WNDCLASS wndclass1;
    wndclass1.style        = CS_HREDRAW | CS_VREDRAW ;
    wndclass1.lpfnWndProc  = WndProc1 ;
    wndclass1.cbClsExtra   = 0 ;
    wndclass1.cbWndExtra   = 0 ;
    wndclass1.hInstance    = hInstance ;
    wndclass1.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass1.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
    wndclass1.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass1.lpszMenuName  = NULL ;
    wndclass1.lpszClassName= szAppName1 ;
    
    WNDCLASSEX wndclass2;
    wndclass2.cbSize       = sizeof(WNDCLASSEX);
    wndclass2.style        = CS_HREDRAW | CS_VREDRAW | CS_OWNDC ;
    wndclass2.lpfnWndProc  = WndProc2 ;
    wndclass2.cbClsExtra   = 0 ;
    wndclass2.cbWndExtra   = 0 ;
    wndclass2.hInstance    = hInstance ;
    wndclass2.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass2.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
    wndclass2.hbrBackground= NULL;
    wndclass2.lpszMenuName  = NULL ;
    wndclass2.lpszClassName= szAppName2 ;
    wndclass2.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
    if (!RegisterClass(&wndclass1))
    {
        MessageBox(NULL,TEXT("OH MY GOD1"),szAppName1,MB_ICONERROR);
        return 0;
    }
    if (!RegisterClassEx(&wndclass2))
    {
        MessageBox(NULL,TEXT("OH MY GOD2"),szAppName2,MB_ICONERROR);
        return 0;
    }   
    
    hwnd1 = CreateWindow( szAppName1,      // window class name
        TEXT ("hello window1..."),   // window caption
        WS_POPUP,  // window style
        0,// initial x position
        0,// initial y position
        800,// initial x size
        600,// initial y size
        NULL,                 // parent window handle
        NULL,            // window menu handle
        hInstance,   // program instance handle
        NULL) ;      // creation parameters
    ShowWindow(hwnd1,iCmdShow);
    UpdateWindow(hwnd1);
    
    hwnd2 = CreateWindowEx( WS_EX_TOPMOST,
        szAppName2,      // window class name
        TEXT ("hello window2..."),   // window caption
        WS_CHILD,  // window style
        80,// initial x position
        50,// initial y position
        200,// initial x size
        50,// initial y size
        hwnd1,                 // parent window handle
        NULL,            // window menu handle
        hInstance,   // program instance handle
        NULL) ;      // creation parameters
    ShowWindow(hwnd2,iCmdShow);
    UpdateWindow(hwnd2);
    
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
    

    }

    WndProc2的位图加载有问题 我尝试打断点也进不去 求赐教

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器