CreateWindow的出错解决

CreateWindow返回NULL,而且GetLastError()也返回0,代码如下:

 WNDCLASSEX wc =
 {
  sizeof( WNDCLASSEX ), CS_CLASSDC, NULL/*gWndProc 注意这里直接把它写成 NULL ,贪方便啊.*/, 
  0L, 0L,
  GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
  classname, NULL
 };
 RegisterClassEx( &wc );

 HWND hWnd = CreateWindow( classname, wndname,
  WS_DLGFRAME | WS_SYSMENU, 0, 0,m_ScreenWidth, m_ScreenHeight,
  ::GetDesktopWindow(), NULL,wc.hInstance, NULL );

 

 
把窗口回调函数写成了 NULL ,发现窗口没有显示出来。。,CreateWindow 函数调用 失败...
笨蛋,窗口回调函数都没有.那么消息流向呢.. 这样当然不行的啊..
复制代码
 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 LRESULT CALLBACK WinSunProc(
 5   HWND hwnd,      // handle to window
 6   UINT uMsg,      // message identifier
 7   WPARAM wParam,  // first message parameter
 8   LPARAM lParam   // second message parameter
 9 );
10 
11 int WINAPI WinMain(
12   HINSTANCE hInstance,      // handle to current instance
13   HINSTANCE hPrevInstance,  // handle to previous instance
14   LPSTR lpCmdLine,          // command line
15   int nCmdShow              // show state
16 )
17 {
18     WNDCLASS wndcls;
19     wndcls.cbClsExtra=0;
20     wndcls.cbWndExtra=0;
21     wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
22     wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
23     wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
24     wndcls.hInstance=hInstance;
25     wndcls.lpfnWndProc=WinSunProc;
26     wndcls.lpszClassName="sunxin2006";
27     wndcls.lpszMenuName=NULL;
28     wndcls.style=CS_HREDRAW | CS_VREDRAW;
29     RegisterClass(&wndcls);
30 
31     HWND hwnd;
32     hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW,
33         0,0,600,400,NULL,NULL,hInstance,NULL);
34 
35     ShowWindow(hwnd,SW_SHOWNORMAL);
36     UpdateWindow(hwnd);
37 
38     MSG msg;
39     while(GetMessage(&msg,NULL,0,0))
40     {
41         TranslateMessage(&msg);
42         DispatchMessage(&msg);
43     }
44     return msg.wParam;
45 }
46 
47 LRESULT CALLBACK WinSunProc(
48   HWND hwnd,      // handle to window
49   UINT uMsg,      // message identifier
50   WPARAM wParam,  // first message parameter
51   LPARAM lParam   // second message parameter
52 )
53 {
54     switch(uMsg)
55     {
56     case WM_CHAR:
57         char szChar[20];
58         sprintf(szChar,"char code is %d",wParam);
59         MessageBox(hwnd,szChar,"char",0);
60         break;
61     case WM_LBUTTONDOWN:
62         MessageBox(hwnd,"mouse clicked","message",0);
63         HDC hdc;
64         hdc=GetDC(hwnd);
65         TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
66         //ReleaseDC(hwnd,hdc);
67         break;
68     case WM_PAINT:
69         HDC hDC;
70         PAINTSTRUCT ps;
71         hDC=BeginPaint(hwnd,&ps);
72         TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
73         EndPaint(hwnd,&ps);
74         break;
75     case WM_CLOSE:
76         if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
77         {
78             DestroyWindow(hwnd);
79         }
80         break;
81     case WM_DESTROY:
82         PostQuitMessage(0);
83         break;
84     default:
85         return DefWindowProc(hwnd,uMsg,wParam,lParam);
86     }
87     return 0;
88 }
复制代码

 

转载于:https://www.cnblogs.com/yangmingyu/p/6928153.html

#include <windows.h> #include <stdio.h> #include <math.h> #include <string.h> #define IDC_BUTTON_ADD 101 #define IDC_BUTTON_SUB 102 #define IDC_BUTTON_MUL 103 #define IDC_BUTTON_DIV 104 #define IDC_BUTTON_SQRT 105 #define IDC_BUTTON_POW 106 #define IDC_EDIT 107 #define IDC_BUTTON_CLEAR 108 #define IDC_BUTTON_BACKSPACE 109 #define IDC_BUTTON_EQUAL 110 #define IDC_BUTTON_DOT 111 #define IDC_BUTTON_SIGN 112 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const char CLASS_NAME[] = "CalculatorClass"; WNDCLASS wc = { }; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); RegisterClass(&wc); HWND hwnd = CreateWindowEx( 0, CLASS_NAME, "Scientific Calculator", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 320, 400, NULL, NULL, hInstance, NULL ); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); MSG msg = { }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static double num1 = 0, num2 = 0, result = 0; static char operation = '\0'; static BOOL isContinuous = FALSE; static BOOL isDecimal = FALSE; static int decimalPlaces = 0; switch (msg) { case WM_CREATE: // 创建编辑框(显示区域) CreateWindow("edit", "0", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT | ES_READONLY, 10, 10, 280, 40, hwnd, (HMENU)IDC_EDIT, NULL, NULL); // 创建数字按钮 CreateWindow("button", "7", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 60, 50, 40, hwnd, (HMENU)'7', NULL, NULL); CreateWindow("button", "8", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 70, 60, 50, 40, hwnd, (HMENU)'8', NULL, NULL); CreateWindow("button", "9", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 130, 60, 50, 40, hwnd, (HMENU)'9', NULL, NULL); CreateWindow("button", "4", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 110, 50, 40, hwnd, (HMENU)'4', NULL, NULL); CreateWindow("button", "5", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 70, 110, 50, 40, hwnd, (HMENU)'5', NULL, NULL); CreateWindow("button", "6", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 130, 110, 50, 40, hwnd, (HMENU)'6', NULL, NULL); CreateWindow("button", "1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 160, 50, 40, hwnd, (HMENU)'1', NULL, NULL); CreateWindow("button", "2", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 70, 160, 50, 40, hwnd, (HMENU)'2', NULL, NULL); CreateWindow("button", "3", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 130, 160, 50, 40, hwnd, (HMENU)'3', NULL, NULL); CreateWindow("button", "0", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 210, 110, 40, hwnd, (HMENU)'0', NULL, NULL); CreateWindow("button", ".", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 130, 210, 50, 40, hwnd, (HMENU)IDC_BUTTON_DOT, NULL, NULL); CreateWindow("button", "+/-", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 190, 210, 50, 40, hwnd, (HMENU)IDC_BUTTON_SIGN, NULL, NULL); // 操作符按钮 CreateWindow("button", "+", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 190, 60, 50, 40, hwnd, (HMENU)IDC_BUTTON_ADD, NULL, NULL); CreateWindow("button", "-", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 190, 110, 50, 40, hwnd, (HMENU)IDC_BUTTON_SUB, NULL, NULL); CreateWindow("button", "*", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 190, 160, 50, 40, hwnd, (HMENU)IDC_BUTTON_MUL, NULL, NULL); CreateWindow("button", "/", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 60, 50, 40, hwnd, (HMENU)IDC_BUTTON_DIV, NULL, NULL); // 科学计算按钮 CreateWindow("button", "√", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 110, 50, 40, hwnd, (HMENU)IDC_BUTTON_SQRT, NULL, NULL); CreateWindow("button", "^", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 160, 50, 40, hwnd, (HMENU)IDC_BUTTON_POW, NULL, NULL); // 功能按钮 CreateWindow("button", "=", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 210, 50, 40, hwnd, (HMENU)IDC_BUTTON_EQUAL, NULL, NULL); CreateWindow("button", "C", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 260, 70, 40, hwnd, (HMENU)IDC_BUTTON_CLEAR, NULL, NULL); CreateWindow("button", "←", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 90, 260, 70, 40, hwnd, (HMENU)IDC_BUTTON_BACKSPACE, NULL, NULL); break; case WM_COMMAND: char buffer[256]; GetDlgItemText(hwnd, IDC_EDIT, buffer, sizeof(buffer)); // 处理数字输入 if (LOWORD(wParam) >= '0' && LOWORD(wParam) <= '9') { if (strcmp(buffer, "0") == 0 || isContinuous) { buffer[0] = '\0'; isContinuous = FALSE; } char digit[2] = { (char)LOWORD(wParam), '\0' }; strcat(buffer, digit); SetDlgItemText(hwnd, IDC_EDIT, buffer); break; } switch (LOWORD(wParam)) { case IDC_BUTTON_DOT: // 小数点 if (!strchr(buffer, '.')) { strcat(buffer, "."); SetDlgItemText(hwnd, IDC_EDIT, buffer); } break; case IDC_BUTTON_SIGN: // 正负号 if (buffer[0] != '\0') { double num = atof(buffer); num = -num; sprintf(buffer, "%.6g", num); SetDlgItemText(hwnd, IDC_EDIT, buffer); } break; case IDC_BUTTON_CLEAR: // 清除 SetDlgItemText(hwnd, IDC_EDIT, "0"); num1 = num2 = result = 0; operation = '\0'; isContinuous = FALSE; isDecimal = FALSE; decimalPlaces = 0; break; case IDC_BUTTON_BACKSPACE: // 退格 if (strlen(buffer) > 0) { buffer[strlen(buffer) - 1] = '\0'; if (strlen(buffer) == 0) strcpy(buffer, "0"); SetDlgItemText(hwnd, IDC_EDIT, buffer); } break; case IDC_BUTTON_ADD: // 加法 case IDC_BUTTON_SUB: // 减法 case IDC_BUTTON_MUL: // 乘法 case IDC_BUTTON_DIV: // 除法 case IDC_BUTTON_POW: // 乘方 if (isContinuous) { num1 = result; } else { num1 = atof(buffer); } operation = LOWORD(wParam); SetDlgItemText(hwnd, IDC_EDIT, ""); isContinuous = FALSE; break; case IDC_BUTTON_SQRT: // 开方 num1 = atof(buffer); if (num1 >= 0) { result = sqrt(num1); sprintf(buffer, "%.6g", result); SetDlgItemText(hwnd, IDC_EDIT, buffer); num1 = result; isContinuous = TRUE; } else { MessageBox(hwnd, "Cannot calculate square root of negative number", "Error", MB_OK | MB_ICONERROR); } break; case IDC_BUTTON_EQUAL: // 等号 num2 = atof(buffer); switch (operation) { case IDC_BUTTON_ADD: result = num1 + num2; break; case IDC_BUTTON_SUB: result = num1 - num2; break; case IDC_BUTTON_MUL: result = num1 * num2; break; case IDC_BUTTON_DIV: if (num2 != 0.0) { result = num1 / num2; } else { MessageBox(hwnd, "Division by zero is not allowed", "Error", MB_OK | MB_ICONERROR); return 0; } break; case IDC_BUTTON_POW: result = pow(num1, num2); break; default: result = num2; // 没有操作符时直接显示当前值 break; } // 格式化显示结果 if (fabs(result) < 1e10 && fabs(result) > 1e-5) { sprintf(buffer, "%.6g", result); } else { sprintf(buffer, "%.6e", result); } SetDlgItemText(hwnd, IDC_EDIT, buffer); num1 = result; operation = '\0'; isContinuous = TRUE; break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } 104 9 C:\Users\朱明康\Desktop\5.c [Error] a label can only be part of a statement and a declaration is not a statement此步出错改进一下
最新发布
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值