uintptr_t SelectCodePage(uintptr_t nCurrent, bool bShowUnicode, bool bShowUTF, bool bShowUTF7, bool bShowAutoDetect) { CallbackCallSource = CodePageSelect; currentCodePage = nCurrent; // Создаём меню CodePages = new VMenu(L"", nullptr, 0, ScrY-4); CodePages->SetBottomTitle(MSG(!Opt.CPMenuMode?MGetCodePageBottomTitle:MGetCodePageBottomShortTitle)); CodePages->SetFlags(VMENU_WRAPMODE|VMENU_AUTOHIGHLIGHT); CodePages->SetHelp(L"CodePagesMenu"); // Добавляем таблицы символов FillCodePagesVMenu(bShowUnicode, bShowUTF, bShowUTF7, bShowAutoDetect); // Показываем меню CodePages->Show(); // Цикл обработки сообщений меню while (!CodePages->Done()) { switch (CodePages->ReadInput()) { // Обработка скрытия/показа системных таблиц символов case KEY_CTRLH: case KEY_RCTRLH: Opt.CPMenuMode = !Opt.CPMenuMode; CodePages->SetBottomTitle(MSG(!Opt.CPMenuMode?MGetCodePageBottomTitle:MGetCodePageBottomShortTitle)); FillCodePagesVMenu(bShowUnicode, bShowUTF, bShowUTF7, bShowAutoDetect); break; // Обработка удаления таблицы символов из списка выбранных case KEY_DEL: case KEY_NUMDEL: ProcessSelected(false); break; // Обработка добавления таблицы символов в список выбранных case KEY_INS: case KEY_NUMPAD0: ProcessSelected(true); break; // Редактируем имя таблицы символов case KEY_F4: EditCodePageName(); break; default: CodePages->ProcessInput(); break; } } // Получаем выбранную таблицу символов uintptr_t codePage = CodePages->Modal::GetExitCode() >= 0 ? static_cast<WORD>(GetMenuItemCodePage()) : (uintptr_t)-1; delete CodePages; CodePages = nullptr; return codePage; }
void CGame2View::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (mMouseLbuttonDown) { // get client dc for conversion of final rect. // to logical coord. from device coord. CClientDC dc(this); mMouseLbuttonDown = FALSE; if(mBoundingBoxIsUp) { // erase our current box... DrawBoundingBox(mCurSelectRect); } mBoundingBoxIsUp = FALSE; // figure new box... mMouseEndLoc = point; OnPrepareDC(&dc); dc.DPtoLP(&mMouseEndLoc); mCurSelectRect.top = min(mMouseStartLoc.y,mMouseEndLoc.y); mCurSelectRect.bottom = max(mMouseStartLoc.y,mMouseEndLoc.y); mCurSelectRect.left = min(mMouseStartLoc.x,mMouseEndLoc.x); mCurSelectRect.right = max(mMouseStartLoc.x,mMouseEndLoc.x); if( ((mCurSelectRect.bottom - mCurSelectRect.top) < MIN_BOX_WIDTH) && ((mCurSelectRect.right - mCurSelectRect.left) < MIN_BOX_WIDTH) ) { mPointSelectMode = TRUE; mCurSelectPoint = mMouseEndLoc; // dc.DPtoLP(&mCurSelectPoint); } else { mPointSelectMode = FALSE; // dc.DPtoLP(&mCurSelectRect); } // do something here (we now have our selection rectangle // convert to logical coordinates from device.. // show proper stuff as selected.. ProcessSelected(); // force a redraw Invalidate(FALSE); // GetDocument()->UpdateAllViews(this); } else { CScrollView::OnLButtonUp(nFlags, point); } }