m0_63133201 2022-10-11 10:09 采纳率: 87%
浏览 26
已结题

window编出输出位图,运行不了

window编出输出位图,运行不了

img


#include <windows.h>

//函数声明
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);//窗口处理函数
void init();//初始化设备环境
void Render();//渲染函数
void CleanUp();//释放设备环境

//变量定义
HWND hwnd;
HDC hdc, hdcmen;
BITMAP bm;
HBITMAP hbm;


//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    //设计窗口类
    WNDCLASS wndclass = {
        CS_HREDRAW | CS_VREDRAW,
        WndProc,
        0,
        0,
        hInstance,
        LoadIcon(NULL, IDI_APPLICATION),
        LoadCursor(NULL, IDC_ARROW),
        (HBRUSH)GetStockObject(WHITE_BRUSH),
        NULL,
        TEXT("MYDEMO")
    };
    //注册窗口类
    RegisterClass(&wndclass);
    //创建窗口类
    hwnd = CreateWindow(
        TEXT("MYDEMO"),
        TEXT("MyDemo"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);
    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    //更新窗口
    UpdateWindow(hwnd);

    //初始化
    init();

    //消息循环
    MSG Msg;
    BOOL bRet;
    PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE);
    while (Msg.message != WM_QUIT)
    {
        bRet = PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE);
        if (bRet)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        Render();
    }
    CleanUp();

    return Msg.wParam;
}


//窗口过程处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}
//初始化函数
void init()
{
    if (!hwnd)
    {
        return;
    }
    //设备环境获取
    hdc = GetDC(hwnd);
    //获取兼容设备环境
    hdcmen = CreateCompatibleDC(hdc);
    //加载位图
    hbm = (HBITMAP)LoadImage(
        NULL,
        L"monster.bmp",
        IMAGE_BITMAP,
        0,
        0,
        LR_LOADFROMFILE);
    //将位图选入设备环境
    SelectObject(hdcmen, hbm);
    //获取位图大小
    GetObject(hbm, sizeof(BITMAP), &bm);

}
//渲染
void Render()
{
    if (hdc)
    {
        //正常位图输出
        BitBlt(hdc, 200, 0, bm.bmWidth, bm.bmHeight, hdcmen, 0, 0, SRCCOPY);

        //缩放模式设置,一般采用COLORONCOLOR该模式来处理彩色点阵图
        SetStretchBltMode(hdc, COLORONCOLOR);
        //位图缩放输出
        /************************************************
        这里在设备环境中从(0,0)坐标并以宽为200,高为 200输出该位图,
        而该位图是从后备设备环境hdcmen中从(0,0)坐标开始,宽高为该位图大小的位图截取出来
        从而实现缩放显示
        *************************************************/
        StretchBlt(hdc, 0, 0, 200, 200, hdcmen, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);


    }
}
//清除设备环境
void CleanUp()
{
    //清除位图相关
    DeleteObject(hbm);
    DeleteDC(hdcmen);
    ReleaseDC(hwnd, hdc);
}
  • 写回答

2条回答 默认 最新

  • 四海一叶秋 2022-10-11 11:10
    关注

    你新建的项目不对,应该新建win32项目而不是控制台程序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月11日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。