상세 컨텐츠

본문 제목

TrackPopupMenu 시 이벤트 적용

청강컴정/MFC

by luckey 2009. 8. 19. 21:19

본문

이미지 형태의 버튼을 만들고 클릭했을때 메뉴가 뜨도록 했다.

void CCMMenu::PopupMenu(CRect btnRect, UINT nID)
{
 CWnd *pWnd = AfxGetMainWnd();
 HWND hWnd = pWnd->m_hWnd;
 UINT nLoop = 0;
 UINT nCmdNum = 0; //선택된 대상의 고유 ID 부여를 위해 필요
 CRect rect;
 GetWindowRect(hWnd, rect);

 UINT uposTop = rect.top + btnRect.bottom + CGlobal::Instance()->GetBitmapSize(IDX_BMP_CAPTION_LEFT).cy -1;
 UINT uposLeft = rect.left + btnRect.left + CGlobal::Instance()->GetBitmapSize(IDX_BMP_CAPTION_LEFT).cx -1;

 CMenu menu;
 menu.CreatePopupMenu();
 for(nLoop = 0; nLoop < pMenuArray[nID].nCmdType; nLoop++)
 {
  nCmdNum = ((nID*10) + nLoop + 11) + 20000;
  menu.AppendMenu(MF_STRING, nCmdNum, L"Menu");
 }

 /*! selected not return 0 */
 int menuId = menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RETURNCMD, uposLeft, uposTop, pWnd);
 
 menu.DestroyMenu();
}

TrackPopupMenu 같은 경우는 메뉴를 띄워주는 것이기 때문에 팝업메뉴의 아이템을 선택하지 않으면 PopupMenu를 호출한 곳으로 돌아가지 않는 현상이 생긴다.

위 처럼 코드를 작성할 경우 AppendMenu 에서 부여해준 번호를 return 해준다. 

크게 문제가 발생할 것 같지 않지만 문제는 크다.!!
PopupMenu를 호출하는 함수안에서 다음 으로 진행이 되지 않는 것이다. ㅠ.ㅠ
한참을 찾아 다녔는데.....

관련글 더보기

댓글 영역