正在检测何时单击按钮?[C++,WinAPI]
Detecting when a button is clicked? [C++, WinAPI]
好的,在这个程序中,我使用Code::Blocks IDE和GNU GCC编译器来编译一个可执行文件。它是一个Win32 GUI项目。我的问题是,尽管这一切都在起作用,但我最近试图实现点击按钮来对它们进行编码&让它们发挥作用。然而,我遇到了一个奇怪的错误,因为那个家伙告诉我代码应该可以工作/
错误:||===生成文件:在Agsploit中发布(编译器:GNU GCC编译器)===|C:\Users\PC\Desktop\Agsplit\main.cpp||函数'intWinMain(HINSTANCE,HINSTANCE,LPSTR,int)':|C: \Users\PC\Desktop\Agsploit\main.cpp|14|错误:应为数字常量前的不合格id|C: \Users\PC\Desktop\Agsploit\main.cpp|55|注意:在宏的扩展中"执行"||===生成失败:1个错误,0个警告(0分钟,1秒)===|
代码(抱歉,不知道如何在这里格式化,所以粘贴了它):http://pastebin.com/raw/r6b5NcXK
#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#include <tchar.h>
#include <windows.h>
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
TCHAR szClassName[] = _T("WindowClass");
#define Execute 0
#define RunScript 1
#define Clear 2
#define Help 3
#define Credits 4
#define Commands 5
#define Exit 6
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) {
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl)) {
return 0;
};
hwnd = CreateWindowEx(
0,
szClassName,
_T("LightNinG || v1 || By: [Team AzuL]"),
WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME,
400,
200,
740,
390,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
HWND Execute = CreateWindow(
"BUTTON",
"Execute",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
250,
315,
235,
50,
hwnd,
(HMENU)Execute,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND ScriptButton = CreateWindow(
"BUTTON",
"Run script",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
485,
315,
250,
50,
hwnd,
(HMENU)RunScript,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND Clear = CreateWindow(
"BUTTON",
"Clear",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
0,
315,
250,
50,
hwnd,
(HMENU)Clear,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND Help = CreateWindow(
"BUTTON",
"Help",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
400,
0,
85,
84,
hwnd,
(HMENU)Help,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND Credits = CreateWindow(
"BUTTON",
"Credits",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
400,
84,
85,
84,
hwnd,
(HMENU)Credits,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND Commands = CreateWindow(
"BUTTON",
"Commands",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
400,
168,
85,
84,
hwnd,
(HMENU)Commands,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND Exit = CreateWindow(
"BUTTON",
"Exit",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
400,
252,
85,
64,
hwnd,
(HMENU)Exit,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL
);
HWND OutputWindow = CreateWindow("Edit", "Hello, and welcome to LightNinG by Team AzuL.rnCurrent version: 1rnCurrent # of commands: 0", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_MULTILINE | ES_READONLY, 0, 0, 400, 290, hwnd, NULL, NULL, NULL);
HWND InputBar = CreateWindow("Edit", "Input commands here.", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 290, 400, 25, hwnd, NULL, NULL, NULL);
HWND ScriptBox = CreateWindow("Edit", "Script(s) go here {client-sided}.", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_MULTILINE, 485, 0, 250, 314, hwnd, NULL, NULL, NULL);
ShowWindow (hwnd, nCmdShow);
while (GetMessage(&messages, NULL, 0, 0)) {
TranslateMessage(&messages);
DispatchMessage(&messages);
};
return messages.wParam;
};
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_COMMAND:
switch(LOWORD(wParam)) {
case Execute:
break;
case RunScript:
break;
case Clear:
break;
case Help:
break;
case Credits:
MessageBox(NULL, (LPCWSTR)L"Created by team AzuL.", (LPCWSTR)L"Credits", MB_OK);
break;
case Commands:
break;
case Exit:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
};
return 0;
};
第14行(在错误消息中指出)是
#define Execute 0
第55行(也在您的错误消息中指出)是:
HWND Execute = CreateWindow(
扩展为:
HWND 0 = CreateWindow(
这不是有效的C++。
专家们强烈建议有一个原因:
- 尽可能少地使用预处理器
- 如果必须使用它,请对宏使用ALL_UPPER_CASE(不用于其他任何操作)
首选的解决方案是:
enum class Command : int
{
Execute = 1, // I'd always reserve 0 for "no such command".
RunScript,
Clear,
Help,
Credits,
Commands,
Exit,
};
然后可以使用(HMENU)Command::Execute
创建按钮。
相关文章:
- WinAPI挂钩鼠标
- 将执行、作业和WinAPI相乘
- 如何在桌面C++上使用 WinApi 画线
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- Winapi:屏幕截图未显示在窗口中
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- Qt with WinAPI MouseProc
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- WinAPI 无法创建按钮
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- WinAPI 检查窗口是否具有常规标题栏
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 将Qt集成到现有的VS项目中以取代WinAPI
- __stdcall - WINAPI vs STDMETHODCALLTYPE vs APIENTRY
- 如何将'this'指针传递给C++ WinAPI 线程?
- Winapi-WM_CLOSE的替代方案
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- WinAPI C++如何从 64 位应用程序加载资源
- winapi 中的哪个功能检查按钮是否正在关闭控制台?
- WinAPI 窗口在使用 PrintWindow 截屏后不再更新