我已將 ID_BUTTON 定義為 1,當我嘗試運行代碼時:
CreateWindow(L"Button", L"TEst", style, monitor.right / 2 - 100, 200, 100, 50, m_hWnd, (HMENU) ID_BUTTON, NULL, NULL);
我收到一條錯誤訊息,提示“需要一個 ')' ”
如果我用 NULL 而不是“(HMENU)ID_BUTTON”,它作業正常,我錯過了什么?
#include "Window.h"
#define ID_BUTTON 1;
RECT monitor; // deminsions of monitor
Window::Window() : m_hInst(GetModuleHandle(nullptr)) //creates the window
{
WNDCLASS wc = {};
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hInstance = m_hInst;
wc.lpszClassName = ClassName;
wc.lpfnWndProc = WindProc;
RegisterClass(&wc);
DWORD style = WS_OVERLAPPEDWINDOW | WS_VISIBLE;
GetWindowRect(GetDesktopWindow(), &monitor);
m_hWnd = CreateWindow(ClassName, WindowTitle, style, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
ShowWindow(m_hWnd, SW_MAXIMIZE);
}
Window::~Window()
{
UnregisterClass(ClassName, m_hInst);
}
LRESULT CALLBACK WindProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) // gets input from user
{
switch (msg) {
case WM_CREATE:
AddControls(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_WINDOWPOSCHANGED:
std::cout << "1";
break;
default:
return DefWindowProcW(hwnd, msg, wp, lp);
}
return 1;
}
bool Window::ProcessMessage()
{
MSG msg = {};
while (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) {
if (msg.message == WM_QUIT)
return false;
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
return true;
}
void AddControls(HWND m_hWnd)
{
DWORD style = WS_VISIBLE | WS_CHILD | SS_CENTER;
HWND title = CreateWindow(L"static", L"Welcome", style, monitor.right/2 - 100, 100, 200, 100, m_hWnd, NULL, NULL, NULL);
SendMessage(title, WM_SETFONT, WPARAM(CreateFont(50, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial")), true);
CreateWindow(L"Button", L"TEst", style, monitor.right / 2 - 100, 200, 100, 50, m_hWnd, (HMENU) ID_BUTTON, NULL, NULL);
}
uj5u.com熱心網友回復:
#define ID_BUTTON 1;
您將ID_BUTTON宏定義為“ 1;”。宏只不過是一個搜索/替換功能。因此,在宏擴展之后,相關行現在顯示為:
CreateWindow(L"Button", L"TEst", style, monitor.right / 2 - 100, 200, 100,
50, m_hWnd, (HMENU) 1;, NULL, NULL);
語法錯誤現在應該很明顯了。只需洗掉分號。宏指令不是必須后跟分號的 C 陳述句。他們生活在自己的 C 宇宙小泡泡中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533364.html
上一篇:Xamarin在子級之間形成TabbedPage導航
下一篇:Oracle表值函式中的CTE
