void CFolderHander::OnBtnFileTypes(EventArgs *pEvt) { SWindow *pBtn = sobj_cast<SWindow>(pEvt->sender); CRect rcBtn = pBtn->GetWindowRect(); HWND hWnd = pBtn->GetContainer()->GetHostHwnd(); ::ClientToScreen(hWnd,(LPPOINT)&rcBtn); ::ClientToScreen(hWnd,(LPPOINT)&rcBtn+1); SMenu menu; menu.LoadMenu(_T("menu_filetype"),_T("xml")); for(int i=0;i<(int)m_lstLangExts.GetCount();i++) { SStringW strDesc = m_lstLangExts[i].strLang+L":"+m_lstLangExts[i].strExts; menu.InsertMenu(i,MF_BYPOSITION,i+10,S_CW2T(strDesc),-1); } int id = menu.TrackPopupMenu(TPM_RIGHTALIGN|TPM_RETURNCMD,rcBtn.right,rcBtn.bottom,hWnd); if(id!=0) { id-=10; SEdit *pEdit = m_pFolderRoot->FindChildByName2<SEdit>(L"edit_filetypes"); SASSERT(pEdit); if(pEdit->GetWindowTextLength()!=0) { pEdit->SetSel((DWORD)-1); pEdit->ReplaceSel(L";"); } pEdit->SetSel((DWORD)-1); pEdit->ReplaceSel(m_lstLangExts[id].strExts); } }
RECT SCaret::Draw(IRenderTarget *pRT,int x, int y,BOOL bErase) { SWindow * pOwner = SWindowMgr::GetWindow(m_owner); SASSERT(pOwner); SASSERT(pOwner->IsFocusable()); CAutoRefPtr<IRenderTarget> pRTCaret; GETRENDERFACTORY->CreateRenderTarget(&pRTCaret,0,0); pRTCaret->SelectObject(m_bmpCaret); CSize szCaret = m_bmpCaret->Size(); CRect rcCaret(CPoint(x,y),szCaret); CRect rcWnd = pOwner->GetClientRect(); SWindow *pWnd = pOwner->GetParent(); while(pWnd) { CRect rcLimit = pWnd->GetClientRect(); rcWnd = rcWnd & rcLimit; pWnd = pWnd->GetParent(); } pOwner->GetContainer()->FrameToHost(rcWnd); CRect rcCaretShow = rcCaret & rcWnd; pRT->BitBlt(&rcCaretShow,pRTCaret,rcCaretShow.left - rcCaret.left,rcCaretShow.top - rcCaret.top,DSTINVERT); return rcCaretShow; }