Хорошо, поэтому я последовал предложению Джонатана, который заключался в использовании подкласса.
Я подклассифицировал элемент управления stati c, чтобы элемент управления мог захватить сообщение LButtonUp
. Когда подклассный элемент управления получает сообщение, он отправляет пользовательское сообщение своему родительскому дескриптору. Затем родительский дескриптор выполняет все необходимые действия.
Простой дизайн кода будет выглядеть примерно так:
// MyDlg.cpp
BOOL MyDlg::DefaultWindowProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch( uMsg)
{
...
...
case SOME_SPECIAL_MSG:
doSomething3():
return (INT_PTR)TRUE;
case WM_COMMAND:
if( HIWORD(wParam) == 0 )
dwSelectID = LOWORD(wParam);
if ( dwSelectID == IDC_BUTTON1 )
doSomething1();
else if ( dwSelectID == IDC_BUTTON2 )
doSomething2();
...
...
}
}
// Static.cpp
LRESULT CALLBACK UDStatic::StaticProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam, DWORD_PTR pwRefData)
{
UDStatic* pThis = (UDStatic*)pwRefData;
switch (nMsg)
{
...
case WM_LBUTTONUP:
pThis->OnLButtonUp(hWnd, wParam, lParam, pwRefData);
break;
}
}
void UDStatic::OnLButtonUp(hWnd, wParam, lParam, pwRefData)
{
HWND hWndParent = GetParent(hWnd);
if (hWndParent)
PostMessage( hWndParent, SOME_SPECIAL_MSG, 0, 0);
}
Другой способ решения проблема заключалась бы в создании настраиваемой текстовой кнопки, чтобы она наследовала свойство кнопки (BN_CLICKED); Получает работу.