Using only Win32 C++ (no WTL or MFC or any other third-party library), how can I get custom menu borders?
I was able to ownerdrawn the items but the borders are in the Non Client area and I was unable to find a way change them.
Is there a way?
Using only Win32 C++ (no WTL or MFC or any other third-party library), how can I get custom menu borders?
I was able to ownerdrawn the items but the borders are in the Non Client area and I was unable to find a way change them.
Is there a way?
static bool isInitPopup = false;
switch (message)
{
case WM_INITMENUPOPUP:
{
isInitPopup = true;
break;
}
case WM_DRAWITEM:
{
LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)lParam;
if (lpDIS->CtlType == ODT_MENU)
{
auto hMenuWnd = FindWindow(_T("#32768"), NULL);
if (IsWindow(hMenuWnd)&& isInitPopup)
{
RECT rect;
::GetWindowRect(hMenuWnd, &rect);
auto menuDc = ::GetWindowDC(hMenuWnd);
::OffsetRect(&rect, -rect.left, -rect.top);
int border = 1;
rect.left = rect.left + border;
rect.top = rect.top + border;
rect.bottom = rect.bottom - border;
rect.right = rect.right - border;
HBRUSH bg = CreateSolidBrush(RGB(255,0,0));
//Rectangle(menuDc, rect.left, rect.top, rect.right, rect.bottom);
int borderThiness = 3;
::ExcludeClipRect(menuDc, rect.left+ borderThiness, rect.top+ borderThiness, rect.right- borderThiness, rect.bottom- borderThiness);
::FillRect(menuDc, &rect, bg);
DeleteObject(bg);
isInitPopup = false;
}
break;
}