سؤال

ولدي التطبيق الذي أنا أكتب المعالج الصغير لل. ومن الآلي جزء صغير من التطبيق من خلال تحريك الماوس إلى تخصيص الأزرار والقوائم والنقر عليها بحيث يمكن للمستخدم مشاهدة.

وحتى الآن وهو يتحرك الماوس إلى عنصر الشجرة ويرسل النقر بزر الماوس الأيمن. أن ينبثق القائمة عبر TrackPopupMenu. الأول المقبل تحريك الماوس إلى العنصر المناسب في القائمة المنبثقة. ما لا أستطيع معرفة هو كيفية تحديد عنصر القائمة.

ولقد حاولت إرسال نقرات اليسرى لنافذة صاحب القائمة، وحاول إرسال WM_COMMAND إلى صاحب القائمة، وما إلى ذلك لا شيء يعمل.

وأعتقد أن القائمة هي نافذة في حد ذاته، ولكن أنا لا أعرف كيفية الحصول على HWND لذلك من HMENU أن لدي.

وأية أفكار حول كيفية PostMessage بنقرة واحدة إلى قائمة منبثقة؟

وPS أنا باستخدام موضوع مستقل لدفع الرسائل الماوس وآخر، لذلك ليس لديها مشاكل مع TrackPopupMenu يجري متزامن.

هل كانت مفيدة؟

المحلول

ولم أجد وسيلة المحافظ للقيام بذلك، ولكن الأعمال التالية بشكل جيد:

//in my case, the menu is a popup from a tree control created with:
CMenu menu;
menu.CreatePopupMenu();
//add stuff to the menu...
pTreeCtrl->SetMenu(&menu);
m_hMenu = menu.GetSafeHmenu();
CPoint  pt;
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, _pTreeCtrl);
menu.Detach();
m_hMenu = NULL;

وكانت تسمى وظيفة المذكورة أعلاه على بزر الماوس الأيمن فوق العنصر شجرة. الأسفل يحصل بتشغيل تعليمات برمجية في موضوع مستقل للقيام فوق

CRect rc;
GetMenuItemRect(pTreeCtrl->GetSafeHwnd(), m_hMenu, targetMenuItemIndex, &rc);
if(FALSE == rc.IsRectEmpty())
{
   CPoint target = rc.CenterPoint();
   //this closes the menu
  ::PostMessage(pTreeCtrl->GetSafeHwnd(), WM_CANCELMODE, 0, 0);
  DestroyMenu(m_hMenu);
  m_hMenu = NULL;
  //now simulate the menu click
  ::PostMessage(pTreeCtrl->GetSafeHwnd(), WM_COMMAND, targetMenuItemID, 0);
}

نصائح أخرى

وأتوقع منك أن تولد الرسائل بنقرة اللازمة من خلال الدعوة SendInput . تحريك الماوس فوق حيث القائمة، ثم انقر فوق.

وقد ترغب في إلقاء نظرة على WH_JOURNALPLAYBACK هوك . أعتقد أنها مصممة لتفعل بالضبط ما يبدو لك أن تحاول أن تفعل يدويا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top