abc75727 发表于 2015-9-27 08:11:59

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

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

#include <Windows.h>

#define MAX_LOADSTRING 100
#define IDC_RUN 0
#defineIDS_APP_TITLE 0
// 全局变量:
HINSTANCE hInst;                                                                // 当前实例
TCHAR szTitle;                                        // 标题栏文本
TCHAR szWindowClass;                        // 主窗口类名

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

int WINAPI WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        PSTR    lpCmdLine,
        int       nCmdShow)
{
        // TODO: 在此放置代码。
        MSG msg;

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

        // 执行应用程序初始化:
        if (!InitInstance(hInstance, nCmdShow))
        {
                return FALSE;
        }
       
        // 主消息循环:
        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }

        return msg.wParam;
}



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

        wcex.cbSize = sizeof(WNDCLASSEX);

        wcex.style = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc = WndProc;
        wcex.cbClsExtra = 0;
        wcex.cbWndExtra = 0;
        wcex.hInstance = hInstance;
        wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
        wcex.lpszMenuName = NULL;
        wcex.lpszClassName = szWindowClass;
        wcex.hIconSm = NULL;

        return RegisterClassEx(&wcex);
}

//
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释:
//
//      在此函数中,我们在全局变量中保存实例句柄并
//      创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
        HWND hWnd;

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

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

        if (!hWnd)
        {
                return FALSE;
        }

        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);

        return TRUE;
}

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

        switch (message)
        {
        case WM_CREATE:
        {
                HDC hdc = GetDC(hWnd);                        // 设备DC
                hManDC = CreateCompatibleDC(hdc);
                HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, L"man.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
                SelectObject(hManDC, hBitmap);
                GetObject(hBitmap, sizeof(BITMAP), &bm);
                manWidth = bm.bmWidth / 2;
                manHeight = bm.bmHeight / 2;
                DeleteObject(hBitmap);

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

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

                int xFrame = GetSystemMetrics(SM_CXSIZEFRAME);        // 边框宽度
                int yFrame = GetSystemMetrics(SM_CYSIZEFRAME);        // 边框高度
                int yCaption = GetSystemMetrics(SM_CYCAPTION);        // 标题高度
                int yMenu = GetSystemMetrics(SM_CYMENU);                // 菜单高度
                int xScreen = GetSystemMetrics(SM_CXSCREEN);        // 屏幕宽度
                int yScreen = GetSystemMetrics(SM_CYSCREEN);        // 屏幕高度
                int cx = xFrame + bm.bmWidth + xFrame;                                // 窗口宽度
                int cy = yFrame + yCaption + bm.bmHeight + yFrame;        // 窗口高度
                SetWindowPos(hWnd, HWND_TOP,                 // 设置窗口
                        (xScreen - cx) / 2, (yScreen - cy) / 2,                // 设置窗口位置
                        cx, cy,                                        // 设置窗口尺寸
                        SWP_SHOWWINDOW
                        );

                SetTimer(hWnd, 100, 100, NULL);

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

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

                ReleaseDC(hWnd, hdc);
                break;
        }
        case WM_TIMER:
        {
                step = 1 - step;        // 在0、1之间切换
                x -= 10;
                y += 2;
                InvalidateRect(hWnd, NULL, FALSE);
                break;
        }
        case WM_PAINT:
        {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                // TODO: 在此添加任意绘图代码...
                BitBlt(hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hBgDC, 0, 0, SRCCOPY);
                if (step == 0)
                {
                        BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, manWidth, 0, SRCAND);
                        BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, 0, 0, SRCPAINT);
                }
                else
                {
                        BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, manWidth, manHeight, SRCAND);
                        BitBlt(hMemDC, x, y, manWidth, manHeight, hManDC, 0, manHeight, SRCPAINT);
                }
                BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
                EndPaint(hWnd, &ps);
                break;
        }
        case WM_DESTROY:
                DeleteDC(hMemDC);
                DeleteDC(hBgDC);
                DeleteDC(hManDC);
                KillTimer(hWnd, 100);
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
}

abc75727 发表于 2015-9-27 08:14:18

一本书上的代码,记得之前可以通过的,可是今天运行什么都没有出来,只是说生成成功。。

freeparty 发表于 2015-9-27 14:01:52

你包含资源文件了吗?LoadString哪里。

freeparty 发表于 2015-9-27 14:02:31

你的类名是空的,导致程序在RegisterClass的时候失败。
页: [1]
查看完整版本: 看不出来哪里错了,但是运行什么也没有出来