鱼C论坛

 找回密码
 立即注册
查看: 2288|回复: 3

看不出来哪里错了,但是运行什么也没有出来

[复制链接]
发表于 2015-9-27 08:11:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. // Run.cpp : 定义应用程序的入口点。
  2. //

  3. #include <Windows.h>

  4. #define MAX_LOADSTRING 100
  5. #define IDC_RUN 0
  6. #define  IDS_APP_TITLE 0
  7. // 全局变量:
  8. HINSTANCE hInst;                                                                // 当前实例
  9. TCHAR szTitle[MAX_LOADSTRING];                                        // 标题栏文本
  10. TCHAR szWindowClass[MAX_LOADSTRING];                        // 主窗口类名

  11. // 此代码模块中包含的函数的前向声明:
  12. ATOM                                MyRegisterClass(HINSTANCE hInstance);
  13. BOOL                                InitInstance(HINSTANCE, int);
  14. LRESULT CALLBACK        WndProc(HWND, UINT, WPARAM, LPARAM);

  15. int WINAPI WinMain(HINSTANCE hInstance,
  16.         HINSTANCE hPrevInstance,
  17.         PSTR    lpCmdLine,
  18.         int       nCmdShow)
  19. {
  20.         // TODO: 在此放置代码。
  21.         MSG msg;

  22.         // 初始化全局字符串
  23.         LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  24.         LoadString(hInstance, IDC_RUN, szWindowClass, MAX_LOADSTRING);
  25.         MyRegisterClass(hInstance);

  26.         // 执行应用程序初始化:
  27.         if (!InitInstance(hInstance, nCmdShow))
  28.         {
  29.                 return FALSE;
  30.         }
  31.        
  32.         // 主消息循环:
  33.         while (GetMessage(&msg, NULL, 0, 0))
  34.         {
  35.                 TranslateMessage(&msg);
  36.                 DispatchMessage(&msg);
  37.         }

  38.         return msg.wParam;
  39. }



  40. //
  41. //  函数: MyRegisterClass()
  42. //
  43. //  目的: 注册窗口类。
  44. //
  45. //  注释:
  46. //
  47. //    仅当希望
  48. //    此代码与添加到 Windows 95 中的“RegisterClassEx”
  49. //    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
  50. //    这样应用程序就可以获得关联的
  51. //    “格式正确的”小图标。
  52. //
  53. ATOM MyRegisterClass(HINSTANCE hInstance)
  54. {
  55.         WNDCLASSEX wcex;

  56.         wcex.cbSize = sizeof(WNDCLASSEX);

  57.         wcex.style = CS_HREDRAW | CS_VREDRAW;
  58.         wcex.lpfnWndProc = WndProc;
  59.         wcex.cbClsExtra = 0;
  60.         wcex.cbWndExtra = 0;
  61.         wcex.hInstance = hInstance;
  62.         wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  63.         wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  64.         wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  65.         wcex.lpszMenuName = NULL;
  66.         wcex.lpszClassName = szWindowClass;
  67.         wcex.hIconSm = NULL;

  68.         return RegisterClassEx(&wcex);
  69. }

  70. //
  71. //   函数: InitInstance(HINSTANCE, int)
  72. //
  73. //   目的: 保存实例句柄并创建主窗口
  74. //
  75. //   注释:
  76. //
  77. //        在此函数中,我们在全局变量中保存实例句柄并
  78. //        创建和显示主程序窗口。
  79. //
  80. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  81. {
  82.         HWND hWnd;

  83.         hInst = hInstance; // 将实例句柄存储在全局变量中

  84.         hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  85.                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInstance, NULL);

  86.         if (!hWnd)
  87.         {
  88.                 return FALSE;
  89.         }

  90.         ShowWindow(hWnd, nCmdShow);
  91.         UpdateWindow(hWnd);

  92.         return TRUE;
  93. }

  94. //
  95. //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  96. //
  97. //  目的: 处理主窗口的消息。
  98. //
  99. //  WM_COMMAND        - 处理应用程序菜单
  100. //  WM_PAINT        - 绘制主窗口
  101. //  WM_DESTROY        - 发送退出消息并返回
  102. //
  103. //
  104. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  105. {
  106.         static HDC hBgDC;        // 存储背景图片的内存DC
  107.         static HDC hManDC;        // 存储人物图片的内存DC
  108.         static BITMAP bm;        // 背景图片的相关信息,主要是尺寸
  109.         static UINT manWidth, manHeight;        // 人物的尺寸
  110.         static UINT step = 0;        // 动作的计数
  111.         static int x, y;                // 人物的位置
  112.         static HDC hMemDC;        // 缓冲DC

  113.         switch (message)
  114.         {
  115.         case WM_CREATE:
  116.         {
  117.                 HDC hdc = GetDC(hWnd);                        // 设备DC
  118.                 hManDC = CreateCompatibleDC(hdc);
  119.                 HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"man.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
  120.                 SelectObject(hManDC, hBitmap);
  121.                 GetObject(hBitmap, sizeof(BITMAP), &bm);
  122.                 manWidth = bm.bmWidth / 2;
  123.                 manHeight = bm.bmHeight / 2;
  124.                 DeleteObject(hBitmap);

  125.                 hBgDC = CreateCompatibleDC(hdc);
  126.                 hBitmap = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
  127.                 SelectObject(hBgDC, hBitmap);

  128.                 GetObject(hBitmap, sizeof(BITMAP), &bm);                // 根据位图句柄得到其尺寸
  129.                 DeleteObject(hBitmap);

  130.                 int xFrame = GetSystemMetrics(SM_CXSIZEFRAME);        // 边框宽度
  131.                 int yFrame = GetSystemMetrics(SM_CYSIZEFRAME);        // 边框高度
  132.                 int yCaption = GetSystemMetrics(SM_CYCAPTION);        // 标题高度
  133.                 int yMenu = GetSystemMetrics(SM_CYMENU);                // 菜单高度
  134.                 int xScreen = GetSystemMetrics(SM_CXSCREEN);        // 屏幕宽度
  135.                 int yScreen = GetSystemMetrics(SM_CYSCREEN);        // 屏幕高度
  136.                 int cx = xFrame + bm.bmWidth + xFrame;                                // 窗口宽度
  137.                 int cy = yFrame + yCaption + bm.bmHeight + yFrame;        // 窗口高度
  138.                 SetWindowPos(hWnd, HWND_TOP,                 // 设置窗口
  139.                         (xScreen - cx) / 2, (yScreen - cy) / 2,                // 设置窗口位置
  140.                         cx, cy,                                        // 设置窗口尺寸
  141.                         SWP_SHOWWINDOW
  142.                         );

  143.                 SetTimer(hWnd, 100, 100, NULL);

  144.                 x = bm.bmWidth - manWidth;
  145.                 y = (bm.bmHeight - manHeight) / 2;

  146.                 hMemDC = CreateCompatibleDC(hdc);
  147.                 HBITMAP hTemp = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
  148.                 SelectObject(hMemDC, hTemp);
  149.                 DeleteObject(hTemp);

  150.                 ReleaseDC(hWnd, hdc);
  151.                 break;
  152.         }
  153.         case WM_TIMER:
  154.         {
  155.                 step = 1 - step;        // 在0、1之间切换
  156.                 x -= 10;
  157.                 y += 2;
  158.                 InvalidateRect(hWnd, NULL, FALSE);
  159.                 break;
  160.         }
  161.         case WM_PAINT:
  162.         {
  163.                 PAINTSTRUCT ps;
  164.                 HDC hdc = BeginPaint(hWnd, &ps);
  165.                 // TODO: 在此添加任意绘图代码...
  166.                 BitBlt(hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hBgDC, 0, 0, SRCCOPY);
  167.                 if (step == 0)
  168.                 {
  169.                         BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, manWidth, 0, SRCAND);
  170.                         BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, 0, 0, SRCPAINT);
  171.                 }
  172.                 else
  173.                 {
  174.                         BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, manWidth, manHeight, SRCAND);
  175.                         BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, 0, manHeight, SRCPAINT);
  176.                 }
  177.                 BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
  178.                 EndPaint(hWnd, &ps);
  179.                 break;
  180.         }
  181.         case WM_DESTROY:
  182.                 DeleteDC(hMemDC);
  183.                 DeleteDC(hBgDC);
  184.                 DeleteDC(hManDC);
  185.                 KillTimer(hWnd, 100);
  186.                 PostQuitMessage(0);
  187.                 break;
  188.         default:
  189.                 return DefWindowProc(hWnd, message, wParam, lParam);
  190.         }
  191.         return 0;
  192. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-9-27 08:14:18 | 显示全部楼层
一本书上的代码,记得之前可以通过的,可是今天运行什么都没有出来,只是说生成成功。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-27 14:01:52 | 显示全部楼层
你包含资源文件了吗?LoadString哪里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-9-27 14:02:31 | 显示全部楼层
你的类名是空的,导致程序在RegisterClass的时候失败。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 19:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表