win32编程 -- 滚轮实现放大或缩小图片

我怎么可能失望呢,我对这个世界早就不抱任何希望了。。。

----  网易云热评

一、添加一张位图

 

二、相关代码

 

#include <windows.h>#include "resource.h"HINSTANCE g_hInstance = 0;//接收当前程序实例句柄HANDLE g_输出句柄 = 0;//接收标准输出句柄int g_x = 128;int g_y = 128;void 绘图(HWND hWnd){       PAINTSTRUCT p = { 0 };       HDC hdc = BeginPaint(hWnd, &p);       HBITMAP hBmp = LoadBitmap(g_hInstance, (wchar_t*)IDB_BITMAP1);       //到内存dc       HDC hMDc = CreateCompatibleDC(hdc);       HGDIOBJ hOBp=SelectObject(hMDc, hBmp);       StretchBlt(hdc, 0, 0, g_x, g_y, hMDc, 0, 0, 112, 88, SRCCOPY);              //把位图取出来       SelectObject(hMDc, hOBp);       DeleteObject(hBmp);       DeleteDC(hMDc);                  EndPaint(hWnd, &p);}void 滑轮滚动(HWND hWnd,WPARAM wParam){       short nOf = HIWORD(wParam);       g_y += nOf / 120;       g_x += nOf / 120;       InvalidateRect(hWnd,NULL,TRUE);}//2、窗口处理函数LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID,              WPARAM wParam, LPARAM lParam){       //7、处理消息       switch (msgID)       {       case WM_MOUSEWHEEL:       滑轮滚动(hWnd,wParam);              break;case WM_PAINT:       绘图(hWnd);       break;case WM_DESTROY:                     PostQuitMessage(0);//销毁窗口                     break;       }       return DefWindowProc(hWnd, msgID, wParam, lParam);}//3、注册函数,第一个参数,窗口类名称,第二个参数,指向窗口处理函数的函数指针void Register(LPCWSTR lpClassName, WNDPROC winProc){              WNDCLASSEX wc = { 0 };              wc.cbSize = sizeof(wc);//结构体大小             wc.cbClsExtra = 0;//窗口类的申请缓存区,0表示不开启缓存              wc.cbWndExtra = 0;//窗口的申请缓存区,0表示不开启缓存              wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);//背景颜色,一般白色              wc.hCursor = NULL;//设置光标。null表示默认              wc.hIcon = NULL;//默认左上角的图标              wc.hInstance = g_hInstance;//第一个参数实例句柄,可以找到进程在那块内存              wc.lpfnWndProc = winProc; //lp 一般都是指针,处理函数名或指针              wc.lpszClassName = lpClassName;//窗口类名称,比如公司名字              wc.lpszMenuName = NULL;//没有菜单用null              wc.style = CS_HREDRAW | CS_VREDRAW;//窗口变化,会重绘,窗口类的一般风格              RegisterClassEx(&wc);}//4、创建窗口,(窗口类名称,窗口标题栏名称)HWND CreateMain(LPCWSTR lpClassName, LPCWSTR lpWindowName){       HWND hWnd = CreateWindowExW(0, lpClassName, lpWindowName,                WS_OVERLAPPEDWINDOW, 100, 100, 500, 600, NULL, NULL, g_hInstance,  NULL);              return hWnd;}//5、显示窗口(窗口句柄)void Display(HWND hWnd){              ShowWindow(hWnd, SW_SHOW);//句柄,显示方式              UpdateWindow(hWnd);//调用一次刷新窗口}//6、消息循环void Message(){              MSG nMsg = { 0 };              while (GetMessage(&nMsg, nullptr, 0, 0))              {                            TranslateMessage(&nMsg);                            DispatchMessage(&nMsg);              }}//1、入口函数int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevIns, LPSTR lpCmdLine, int  nCmdShow){              AllocConsole();//显示dos窗口              g_输出句柄 = GetStdHandle(STD_OUTPUT_HANDLE);              g_hInstance = hInstance;              Register(L"主", WndProc);    HWND hWnd = CreateMain(L"主", L"主窗口");       Display(hWnd);       Message();       return 0;}

 

欢迎关注公众号:顺便编点程

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值