windows程序设计HEXALC.C的CreateDialog函数创建失败.
本帖最后由 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;
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 BOOLbNewNumber = TRUE;
static int iOperation = '=';
static UINTiNumber, 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
}
**************************************************************
找到问题所在了资源包括里改成#include"afxres.h" 后可以正常显示了 版主 这个怎么结帖
页:
[1]