|
发表于 2018-8-4 16:48:06
|
显示全部楼层
- #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"flower.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);
- }
复制代码 |
|