#include <windows.h>#include <iostream>#include "resource1.h"//宏定义输出函数#define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL);HINSTANCE g_hInst;HANDLE g_hStdout = NULL;CHAR szText[256] = { 0 };//DrawBmpvoid DrawBmp(HDC hDC){ //加载位图 HBITMAP hBMap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BALL01)); //获取位图相关信息。。。新增加,对应笔记里的第8条 BITMAP bmpInfo = { 0 }; GetObject(hBMap, sizeof(bmpInfo), &bmpInfo); //得到一个BITMAP结构体的数据,就可以直接使用得到bmpInfo.bmWidth //创建放置位图的DC HDC hBmpDC = CreateCompatibleDC(hDC); //将位图放入创建的hBmpDC中 HBITMAP hOldBmp = (HBITMAP)SelectObject(hBmpDC, hBMap); //绘制位图 BitBlt BitBlt(hDC, 100, 100, 48, 48, hBmpDC, 0, 0, SRCCOPY); //拉伸绘制位图 StretchBlt StretchBlt(hDC, 200, 100, 200, 200, hBmpDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); //拉伸方式绘制 //取出位图 SelectObject(hBmpDC, hOldBmp); //删除DC DeleteDC(hBmpDC); //删除位图 DeleteObject(hBMap);}//OnPaintvoid OnPaint(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps = { 0 }; HDC hDC = BeginPaint(hWnd, &ps); DrawBmp(hDC); EndPaint(hWnd, &ps);}//OnCommandvoid OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){ int hMenuID = LOWORD(wParam); switch (hMenuID) { case ID_EXIT: PostQuitMessage(0); break; }}LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){ switch (nMsg) { case WM_PAINT: OnPaint(hWnd, nMsg, wParam, lParam); break; case WM_COMMAND: OnCommand(hWnd, nMsg, wParam, lParam); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hWnd, nMsg, wParam, lParam);}BOOL RegisterWnd(LPSTR pszClassName){ WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof(wce); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1); wce.hCursor = NULL; wce.hIcon = NULL; wce.hIconSm = NULL; wce.hInstance = g_hInst; wce.lpfnWndProc = WndProc; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.style = CS_VREDRAW | CS_HREDRAW; ATOM aTom = RegisterClassEx(&wce); if (aTom == 0) { return FALSE; } else { return TRUE; }}HWND CreateWnd(LPSTR pszClassName){ //加入菜单 HMENU hMainMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MAIN)); HWND hWnd = CreateWindowEx(0, pszClassName, "风火中原", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMainMenu, g_hInst, NULL); return hWnd;}void showWnd(HWND hWnd){ ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd);}void msg(){ MSG msg = { 0 }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }}//控制台void ConsoleWnd(){ AllocConsole(); g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE); CHAR szText[] = "Debug start:\n"; PrintLog(szText);}int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd){ g_hInst = hInstance; ConsoleWnd(); RegisterWnd("OOOO"); HWND hWnd = CreateWnd("OOOO"); showWnd(hWnd); msg(); return 0;}