| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1536 人关注过本帖
标题:windows程序设计HexCalc程序 createdialog函数返回NULL问题,求帮助
取消只看楼主 加入收藏
wuyexinfei
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2017-5-7
结帖率:100%
收藏
 问题点数:0 回复次数:0 
windows程序设计HexCalc程序 createdialog函数返回NULL问题,求帮助
windows程序设计HEXALC.C的CreateDialog函数创建失败 断点监控显示返回NULL ,调用getlasterror函数返回1813(加载资源失败),资源只加载了手动输入的dialog模板,具体是那步出错了没找到答案 百度了也没有相似案例 ,代码都是按原书来的.感觉应该是哪步的设置不对 .

手动dialog模板是通过    文件->新建->文件->File创建的. 然后点击右键资源->导入到资源界面里的,不知道是不是这的问题



//下边是到消息循环的代码,执行到createdialog函数时返回了NULL,创建失败处用红色标出了
  ***************************************************************************************************
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("HexCalc");
    HWND         hwnd;
    MSG          msg;
    WNDCLASS     wndclass;

    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = DLGWINDOWEXTRA;    // Note!
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;

    if (!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This program requires Windows NT!"),
            szAppName, MB_ICONERROR);
        return 0;
    }

    hwnd = CreateDialog(hInstance, szAppName, 0, NULL);//此处创建失败

    ShowWindow(hwnd, iCmdShow);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

void ShowNumber(HWND hwnd, UINT iNumber)
{
    TCHAR szBuffer[20];

    wsprintf(szBuffer, TEXT("%X"), iNumber);
    SetDlgItemText(hwnd, VK_ESCAPE, szBuffer);
}

DWORD CalcIt(UINT iFirstNum, int iOperation, UINT iNum)
{
    switch (iOperation)
    {
    case '=': return iNum;
    case '+': return iFirstNum + iNum;
    case '-': return iFirstNum - iNum;
    case '*': return iFirstNum *  iNum;
    case '&': return iFirstNum &  iNum;
    case '|': return iFirstNum | iNum;
    case '^': return iFirstNum ^  iNum;
    case '<': return iFirstNum << iNum;
    case '>': return iFirstNum >> iNum;
    case '/': return iNum ? iFirstNum / iNum : MAXDWORD;
    case '%': return iNum ? iFirstNum % iNum : MAXDWORD;
    default: return 0;
    }
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static BOOL  bNewNumber = TRUE;
    static int   iOperation = '=';
    static UINT  iNumber, iFirstNum;
    HWND         hButton;

    switch (message)
    {
    case WM_KEYDOWN:                   // left arrow --> backspace
        if (wParam != VK_LEFT)
            break;
        wParam = VK_BACK;
        // fall through
    case WM_CHAR:
        if ((wParam = (WPARAM)CharUpper((TCHAR *)wParam)) == VK_RETURN)
            wParam = '=';

        if (hButton = GetDlgItem(hwnd, wParam))
        {
            SendMessage(hButton, BM_SETSTATE, 1, 0);
            Sleep(100);
            SendMessage(hButton, BM_SETSTATE, 0, 0);
        }
        else
        {
            MessageBeep(0);
            break;
        }
        // fall through
    case WM_COMMAND:
        SetFocus(hwnd);

        if (LOWORD(wParam) == VK_BACK)         // backspace
            ShowNumber(hwnd, iNumber /= 16);

        else if (LOWORD(wParam) == VK_ESCAPE)  // escape
            ShowNumber(hwnd, iNumber = 0);

        else if (isxdigit(LOWORD(wParam)))    // hex digit
        {
            if (bNewNumber)
            {
                iFirstNum = iNumber;
                iNumber = 0;
            }
            bNewNumber = FALSE;

            if (iNumber <= MAXDWORD >> 4)
                ShowNumber(hwnd, iNumber = 16 * iNumber + wParam -
                    (isdigit(wParam) ? '0' : 'A' - 10));
            else
                MessageBeep(0);
        }
        else                                    // operation
        {
            if (!bNewNumber)
                ShowNumber(hwnd, iNumber =
                    CalcIt(iFirstNum, iOperation, iNumber));
            bNewNumber = TRUE;
            iOperation = LOWORD(wParam);
        }
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

****************************************************
//下边是手动创建的dialog模板
*****************************************************************************

HexCalc DIALOG -1, -1, 102, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "HexCalc"
CAPTION "Hex Calculator"
{
     PUSHBUTTON "D",       68,  8,  24, 14, 14
     PUSHBUTTON "A",       65,  8,  40, 14, 14
     PUSHBUTTON "7",       55,  8,  56, 14, 14
     PUSHBUTTON "4",       52,  8,  72, 14, 14
     PUSHBUTTON "1",       49,  8,  88, 14, 14
     PUSHBUTTON "0",       48,  8, 104, 14, 14
     PUSHBUTTON "0",       27, 26,   4, 50, 14
     PUSHBUTTON "E",       69, 26,  24, 14, 14
     PUSHBUTTON "B",       66, 26,  40, 14, 14
     PUSHBUTTON "8",       56, 26,  56, 14, 14
     PUSHBUTTON "5",       53, 26,  72, 14, 14
     PUSHBUTTON "2",       50, 26,  88, 14, 14
     PUSHBUTTON "Back",     8, 26, 104, 32, 14
     PUSHBUTTON "C",       67, 44,  40, 14, 14
     PUSHBUTTON "F",       70, 44,  24, 14, 14
     PUSHBUTTON "9",       57, 44,  56, 14, 14
     PUSHBUTTON "6",       54, 44,  72, 14, 14
     PUSHBUTTON "3",       51, 44,  88, 14, 14
     PUSHBUTTON "+",       43, 62,  24, 14, 14
     PUSHBUTTON "-",       45, 62,  40, 14, 14
     PUSHBUTTON "*",       42, 62,  56, 14, 14
     PUSHBUTTON "/",       47, 62,  72, 14, 14
     PUSHBUTTON "%",       37, 62,  88, 14, 14
     PUSHBUTTON "Equals",  61, 62, 104, 32, 14
     PUSHBUTTON "&&",      38, 80,  24, 14, 14
     PUSHBUTTON "|",      124, 80,  40, 14, 14
     PUSHBUTTON "^",       94, 80,  56, 14, 14
     PUSHBUTTON "<",       60, 80,  72, 14, 14
     PUSHBUTTON ">",       62, 80,  88, 14, 14
}
**************************************************************
搜索更多相关主题的帖子: 监控 断点 百度 程序设计 windows 
2017-05-14 15:02
快速回复:windows程序设计HexCalc程序 createdialog函数返回NULL问题,求帮助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017279 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved