鱼C论坛

 找回密码
 立即注册
查看: 2359|回复: 2

windows程序设计HEXALC.C的CreateDialog函数创建失败.

[复制链接]
发表于 2017-5-14 14:58:09 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wuyexinfei 于 2017-5-14 18:15 编辑

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
}
**************************************************************

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-14 18:14:07 | 显示全部楼层
找到问题所在了  资源包括里改成#include"afxres.h" 后可以正常显示了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-14 18:16:44 | 显示全部楼层
版主 这个怎么结帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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