gpt4 book ai didi

winapi BN_CLICKED如何识别单击了哪个按钮?

转载 作者:行者123 更新时间:2023-12-04 06:19:20 25 4
gpt4 key购买 nike

我正在使用c++创建一个简单的win32程序,尽管我认为我仅在此应用程序中使用c。我需要确定在应用程序上按下了哪个HWND按钮。我搜索了msdn引用,它只告诉我HIWORD是BN_CLICKED消息的通知代码,而LOWORD是标识符。我已经设法确定何时单击按钮,但是它仅适用于所有按钮。我的所有按钮都是在WM_CREATE消息中创建的。到目前为止,这是我设法做到的:

case: WM_CREATE:
HWND hPlus = CreateWindowEx( 0, L"BUTTON", L"+", WS_CHILD | WS_VISIBLE, 130, 240, 35, 30, hwnd, ( HMENU )IDC_MENU, GetModuleHandle( NULL ), NULL );
HWND hEquals = CreateWindowEx( 0, L"BUTTON", L"=", WS_CHILD | WS_VISIBLE, 170, 205, 65, 65, hwnd, ( HMENU )IDC_MENU, GetModuleHandle( NULL ), NULL );
break;

case WM_COMMAND:
switch( HIWORD( wParam ) )
{
case BN_CLICKED:
MessageBox( hwnd, L"OK", "OK", MB_OK );
break;
}
break;

我尝试过将hEquals与LOWORD(wParam)进行比较,但这在编译时给了我一个错误。我想我也尝试过将其与lParam的HIWORD和LOWORD进行比较,后者也未编译。现在,我对下一步的工作一无所知。

最佳答案

为每个按钮提供自己的ID,然后将其传递给hMenu参数中的CreateWindowEx:

A handle to a menu, or specifies a child-window identifier, depending on the window style.


#define BTN_PLUS  100
#define BTN_EQUAL 101

CreateWindowEx( 0, L"BUTTON", L"+", WS_CHILD | WS_VISIBLE, 130, 240, 35, 30,
hwnd, ( HMENU )BTN_PLUS, GetModuleHandle( NULL ), NULL );

CreateWindowEx( 0, L"BUTTON", L"=", WS_CHILD | WS_VISIBLE, 170, 205, 65, 65,
hwnd, ( HMENU )BTN_EQUAL , GetModuleHandle( NULL ), NULL );

然后,在 WM_COMMAND中,可以测试ID:
case WM_COMMAND: {
if ( LOWORD( wParam ) == BTN_PLUS ) {
[...]
}
[...]
break;
}

关于winapi BN_CLICKED如何识别单击了哪个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com