int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc = {}; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = wndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.lpszClassName = L"GameOfLifeWindowClass"; if (!RegisterClass(&wc)) { MessageBox(NULL, L"RegisterClass failed!", NULL, NULL); return 1; } int windowWidth = globalWindowWidth = DEFAULT_WINDOW_WIDTH; int windowHeight = globalWindowHeight = DEFAULT_WINDOW_HEIGHT; RECT clientRect = { 0, 0, windowWidth, windowHeight }; DWORD windowStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE; AdjustWindowRect(&clientRect, windowStyle, NULL); HWND hWnd = CreateWindowEx(NULL, wc.lpszClassName, L"Game of Life", windowStyle, 300, 0, clientRect.right - clientRect.left, clientRect.bottom - clientRect.top, NULL, NULL, hInstance, NULL); if (!hWnd) { MessageBox(NULL, L"CreateWindowEx failed!", NULL, NULL); return 1; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); LARGE_INTEGER perfCounterFrequency = { 0 }; QueryPerformanceFrequency(&perfCounterFrequency); LARGE_INTEGER perfCounter = { 0 }; QueryPerformanceCounter(&perfCounter); LARGE_INTEGER prevPerfCounter = { 0 }; float dt = 0.0f; float realDt = dt; const float targetFps = 60.0f; const float targetDt = 1.0f / targetFps; srand((unsigned int)time(NULL)); GameState *gameState = (GameState *)malloc(sizeof(GameState)); memset(gameState, 0, sizeof(GameState)); initGame(gameState, windowWidth, windowHeight); bool gameIsRunning = true; while (gameIsRunning) { prevPerfCounter = perfCounter; QueryPerformanceCounter(&perfCounter); dt = (float)(perfCounter.QuadPart - prevPerfCounter.QuadPart) / (float)perfCounterFrequency.QuadPart; realDt = dt; if (dt > targetDt) dt = targetDt; MSG msg; while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { switch (msg.message) { case WM_QUIT: gameIsRunning = false; break; case WM_KEYDOWN: case WM_KEYUP: switch (msg.wParam) { case VK_ESCAPE: gameIsRunning = false; break; } break; default: TranslateMessage(&msg); DispatchMessage(&msg); break; } } // // UPDATE // // When the window is resized, reinitialize the game with the new window size. if (globalWindowWidth != windowWidth || globalWindowHeight != windowHeight) { windowWidth = globalWindowWidth; windowHeight = globalWindowHeight; initGame(gameState, globalWindowWidth, globalWindowHeight); } // Handle the left mouse button: make the clicked cell alive. if (GetKeyState(VK_LBUTTON) & (1 << 15)) { POINT mousePos; GetCursorPos(&mousePos); ScreenToClient(hWnd, &mousePos); int row = mousePos.y / CELL_HEIGHT_PX; int col = mousePos.x / CELL_WIDTH_PX; if (row < gameState->cellRows && col < gameState->cellCols) { bool *cell = gameState->cells + row*gameState->cellCols + col; *cell = true; } } gameState->tickTimer += dt; if (gameState->tickTimer > TICK_DURATION) { gameState->tickTimer = 0; for (int row = 0; row < gameState->cellRows; ++row) { for (int col = 0; col < gameState->cellCols; ++col) { bool *cell = gameState->cells + row*gameState->cellCols + col; bool *newCell = gameState->newCells + row*gameState->cellCols + col; *newCell = *cell; int liveNeighbours = getLiveNeighbourCount(gameState, row, col); if (*cell) { if (liveNeighbours < 2 || liveNeighbours > 3) *newCell = false; } else { if (liveNeighbours == 3) *newCell = true; } } } bool *tmp = gameState->cells; gameState->cells = gameState->newCells; gameState->newCells = tmp; } // // RENDER // for (int row = 0; row < gameState->cellRows; ++row) { for (int col = 0; col < gameState->cellCols; ++col) { bool *cell = gameState->cells + row*gameState->cellCols + col; int color = *cell ? CELL_COLOR_ALIVE : CELL_COLOR_DEAD; for (int r = 0; r < CELL_HEIGHT_PX; ++r) { for (int c = 0; c < CELL_WIDTH_PX; ++c) { int *pixel = gameState->bitmapBuffer + (row*CELL_HEIGHT_PX + r)*gameState->cellCols*CELL_WIDTH_PX + col*CELL_WIDTH_PX + c; *pixel = color; } } } } HDC hDC = GetDC(hWnd); StretchDIBits(hDC, 0, 0, gameState->bitmapWidth, gameState->bitmapHeight, 0, 0, gameState->bitmapWidth, gameState->bitmapHeight, gameState->bitmapBuffer, gameState->bitmapInfo, DIB_RGB_COLORS, SRCCOPY); ReleaseDC(hWnd, hDC); #if 0 char textBuffer[256]; sprintf(textBuffer, "dt: %f, fps: %f\n", realDt, 1.0f/realDt); OutputDebugStringA(textBuffer); #endif } return 0; }
////调整尺寸//// void CCoolTabCtrl::AutoSize() { UINT PageCount = m_PageList.GetCount(); if(PageCount < 1) return; CPageItem *pItem; POSITION pos; CRect rect,ClientRect,ItemRect; GetClientRect(ClientRect); ClientRect.DeflateRect(m_nBorder+1,m_nBorder+1); GetWindowRect(rect); ScreenToClient(rect); CDC* pDC = GetDC(); CFont *pOldFont = pDC->SelectObject(&m_font); if(m_nStyle&TCS_DOWN) { rect.left += 6; rect.right -= 6; rect.bottom -= 1; rect.top = rect.bottom - ITEMBUTTON_HEIGHT + 1; } else if(m_nStyle&TCS_UP) { rect.left += 2; rect.right -= 6; rect.bottom = rect.top + ITEMBUTTON_HEIGHT; } ItemRect = rect; int AreaWidth = 0,ItemMaxWidth,ItemIndex=0; ItemMaxWidth = rect.Width()/m_PageList.GetCount(); BOOL bMonoSpace = ((m_nStyle&TCS_MONOSPACE) == TCS_MONOSPACE)?1:0; ////////设置按钮初始宽度,并得到按钮所需占用的总宽度/////// for(pos=m_PageList.GetHeadPosition();pos!=NULL;ItemIndex++) { pItem=(CPageItem*)m_PageList.GetNext(pos); if(pItem) { if(!bMonoSpace) ItemMaxWidth = pItem->GetAreaWidth(pDC); AreaWidth += ItemMaxWidth; ItemRect.right = ItemRect.left+ItemMaxWidth-1; pItem->m_rect = ItemRect; ItemRect.left = ItemRect.right + 1; if(pItem->m_pWnd) pItem->m_pWnd->MoveWindow(ClientRect); } } ////////当需要的空间大于实际空间时进行调整//// if(AreaWidth > rect.Width() && !bMonoSpace) { ItemRect = rect; int AreaWidth,MaxWidth = rect.Width()/PageCount; for(pos=m_PageList.GetHeadPosition();pos!=NULL;) { pItem=(CPageItem*)m_PageList.GetNext(pos); if(pItem) { AreaWidth = pItem->GetAreaWidth(pDC); ItemMaxWidth = (ItemMaxWidth < AreaWidth)?MaxWidth:AreaWidth; ItemRect.right = ItemRect.left+ItemMaxWidth; pItem->m_rect = ItemRect; ItemRect.left = ItemRect.right + 1; } } } pDC->SelectObject(pOldFont); ReleaseDC(pDC); }
void CDlgMaintabDownload::InitTabs(void) { CClientRect rtClient(this); CRect rtDownload; GetDlgItem(IDC_TAB_LIST)->GetWindowRect(&rtDownload); ScreenToClient(&rtDownload); m_DownloadTabWnd.Create(WS_CHILD | WS_VISIBLE, rtDownload, this, IDC_TAB_LIST); //m_tabwndDlList.SetBkColor(GetSysColor(COLOR_3DFACE), FALSE); CPageTabBkDraw *pBarBkDraw = new CPageTabBkDraw; m_DownloadTabWnd.SetBarBkDraw(pBarBkDraw); CRect rcSpl; GetDlgItem(IDC_STATIC_SPLITER)->GetWindowRect(&rcSpl); ScreenToClient(&rcSpl); rcSpl.top = rtDownload.bottom; rcSpl.bottom = rcSpl.top; m_wndSplitter.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_DOWNLOAD); m_wndSplitter.SetNormalDraw(FALSE); CRect rtTabInfo; GetDlgItem(IDC_TAB_INFO)->GetWindowRect(&rtTabInfo); ScreenToClient(&rtTabInfo); rtTabInfo.top = rcSpl.top + m_wndSplitter.GetHBreadth(); m_tabwndInfo.Create(WS_CHILD | WS_VISIBLE, rtTabInfo, this, IDC_TAB_INFO); m_lcDownloaded.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_OWNERDRAWFIXED, CRect(0, 0, 0, 0), this, IDC_DOWNLOADED_LISTCTRL); m_RssWnd.Create(m_RssWnd.IDD,this); m_plcDownloading = (CListCtrl*) theApp.emuledlg->transferwnd->GetDlgItem(IDC_DOWNLOADLIST); m_aposTabs[TI_DOWNLOADING] = CmdFuncs::TabWnd_AddNormalTab(&m_DownloadTabWnd, GetResString(IDS_DLTAB_DOWNLOADING), m_plcDownloading->GetSafeHwnd()); m_aposTabs[TI_DOWNLOADED] = CmdFuncs::TabWnd_AddNormalTab(&m_DownloadTabWnd, GetResString(IDS_DLTAB_COMPLETED), m_lcDownloaded.GetSafeHwnd()); m_aposTabs[TI_RSSWND] = CmdFuncs::TabWnd_AddNormalTab(&m_DownloadTabWnd,GetResString(IDS_DLTAB_RSS), m_RssWnd.GetSafeHwnd()); m_DownloadTabWnd.InitBtWnd(); m_DownloadTabWnd.m_BtWnd.ShowWindow(SW_HIDE);//隐藏RSS切换按钮 m_DownloadTabWnd.m_BtWnd.m_btIco.EnableWindow(FALSE);//初始化按钮状态 m_DownloadTabWnd.m_BtWnd.m_btItem.EnableWindow(TRUE); CTabItem_Cake *pTiCake = NULL; if(! m_dlgDetailInfo.GetSafeHwnd()) { m_dlgDetailInfo.Create(m_dlgDetailInfo.IDD, this); } //添加日志页 if(!m_dlgPeerLog.GetSafeHwnd()) { m_dlgPeerLog.Create(m_dlgPeerLog.IDD, this); } //m_aposTabs[TI_DETAIL] = CmdFuncs::TabWnd_AddNormalTab(&m_tabwndInfo, GetResString(IDS_DETAIL_INFO), m_dlgDetailInfo.GetSafeHwnd()); pTiCake = new CTabItem_Cake; pTiCake->SetCaption(GetResString(IDS_DETAIL_INFO)); pTiCake->SetRelativeWnd(m_dlgDetailInfo.GetSafeHwnd()); pTiCake->SetIcon(_T("PNG_DETAILINFO")); m_posInfo = m_aposTabs[TI_DETAIL] = m_tabwndInfo.AddTab(pTiCake); pTiCake = NULL; //VC-dgkang #ifndef _FOREIGN_VERSION if(! m_pwebUserComment) { // don't delete it, auto-deleted m_pwebUserComment = new CHtmlCtrl; CRect rect(0,0,1,1); // tab will resize it m_pwebUserComment->Create(NULL, NULL ,WS_CHILD | WS_VISIBLE &~WS_BORDER, rect,this, 34345,NULL); m_pwebUserComment->SetSilent(true); //m_webUserComment.Create(IDD_WEBBROWSER); } pTiCake = new CTabItem_Cake; pTiCake->SetCaption(GetResString(IDS_USER_COMMENT)); pTiCake->SetRelativeWnd(m_pwebUserComment->GetSafeHwnd()); pTiCake->SetIcon(_T("PNG_DETAILCOMMENT")); m_aposTabs[TI_REMARK] = m_tabwndInfo.AddTab(pTiCake); pTiCake = NULL; #endif //添加日志标签 pTiCake = new CTabItem_Cake; pTiCake->SetCaption(GetResString(IDS_TASK_LOG)); pTiCake->SetRelativeWnd(m_dlgPeerLog.GetSafeHwnd()); pTiCake->SetIcon(_T("PNG_PEERLOG")); m_posPeerLog = m_aposTabs[TI_PEERLOG] = m_tabwndInfo.AddTab(pTiCake); pTiCake = NULL; //添加上传标签 pTiCake = new CTabItem_Cake; pTiCake->SetCaption(GetResString(IDS_UPLOADING)); pTiCake->SetRelativeWnd(((CListCtrl*) theApp.emuledlg->transferwnd->GetDlgItem(IDC_UPLOADLIST))->GetSafeHwnd()); pTiCake->SetIcon(_T("PNG_DETAILUPLOAD")); m_posUploading = m_aposTabs[TI_UPLOADING] = m_tabwndInfo.AddTab(pTiCake); pTiCake = NULL; }
// WaveformViewDialog message handlers void WaveformViewDialog::OnPaint() { BufferredPaintDC dc(this); CRect rectTitle; GetDlgItem(IDC_PLACE_CAPTION)->GetWindowRect(&rectTitle); ScreenToClient(&rectTitle); dc.FillSolidRect(rectTitle, RGB(54, 133, 214)); CRect waveformRect; GetDlgItem(IDC_PLACE_WAVEFORM)->GetWindowRect(&waveformRect); ScreenToClient(&waveformRect); dc.FillSolidRect(waveformRect, RGB(0, 0, 0)); CFont *oldFont = dc.SelectObject(GuiResources::GetInstance()->GetFont(GuiResources::FONT_NORMAL)); dc.SetTextColor(RGB(255, 255, 255)); dc.SetBkMode(TRANSPARENT); CSize textSize = dc.GetTextExtent(_T("88888")); waveformRect.left += textSize.cx + 8; if (monitor_ != NULL && cashIndex_ != -1) { int cashCount = monitor_->Freeze(); if (cashIndex_ < cashCount) { Cash *cash = monitor_->GetCash(cashIndex_); CPen penYellow(PS_SOLID, 1, RGB(255, 255, 0)); CPen penGreen(PS_SOLID, 1, RGB(0, 255, 0)); int count = cash->GetADCSampleCount(g_ADCChannels[channel_].id); if (count > 0) { CString title; title.Format(_T("%s - %s"), (LPCTSTR)CA2T(cash->GetSN()), g_ADCChannels[channel_].name); labelTitle_.SetWindowText(title); const short *codes = cash->GetADCSampleCodes(g_ADCChannels[channel_].id); const short *values = cash->GetADCSampleValues(g_ADCChannels[channel_].id); // draw scaler __int64 sum = 0; short minValue = SHORT_MAX, maxValue = SHORT_MIN; for (int i = 0; i < count; i++) { if (values[i] < minValue) { minValue = values[i]; } if (values[i] > maxValue) { maxValue = values[i]; } sum += values[i]; } CPen whitePen(PS_SOLID, 1, RGB(255, 255, 255)); CPen *oldPen = dc.SelectObject(&whitePen); dc.MoveTo(waveformRect.left, waveformRect.top); dc.LineTo(waveformRect.left, waveformRect.bottom); int height = waveformRect.Height(); int range = g_ADCChannels[channel_].maxValue - g_ADCChannels[channel_].minValue; // min CString label; int x = waveformRect.left - textSize.cx - 8; int y = waveformRect.bottom - (minValue - g_ADCChannels[channel_].minValue) * height / range; dc.MoveTo(waveformRect.left - 4, y); dc.LineTo(waveformRect.right, y); label.Format(_T("%d"), minValue); dc.TextOut(x, y - textSize.cy / 2, label); // center short median = (short)(sum / count); y = waveformRect.bottom - (median - g_ADCChannels[channel_].minValue) * height / range; dc.MoveTo(waveformRect.left - 4, y); dc.LineTo(waveformRect.right, y); label.Format(_T("%d"), median); dc.TextOut(x, y - textSize.cy / 2, label); // max y = waveformRect.bottom - (maxValue - g_ADCChannels[channel_].minValue) * height / range; dc.MoveTo(waveformRect.left - 4, y); dc.LineTo(waveformRect.right, y); label.Format(_T("%d"), maxValue); dc.TextOut(x, y - textSize.cy / 2, label); dc.SelectObject(oldPen); ::DrawWaveform(&dc, waveformRect, codes, codes[0], codes[count - 1], count, &penYellow); ::DrawWaveform(&dc, waveformRect, values, g_ADCChannels[channel_].minValue, g_ADCChannels[channel_].maxValue, count, &penGreen); } } monitor_->Unfreeze(); } dc.SelectObject(oldFont); }
LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { BOOL bProcessed = FALSE; //CCLog("wParam:%d", wParam); switch (message) { case WM_MOUSEWHEEL: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate) { POINT point = { (short)LOWORD(lParam), (short)HIWORD(lParam) }; ScreenToClient(m_hWnd, &point); DPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); float zDelta = (short)HIWORD(wParam); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::middleMouseEvent); handleScrollWheel(pt.x, pt.y, 0, zDelta, event); event->release(); } } break; case WM_MOUSEMOVE: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (MK_LBUTTON == wParam && m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; DPoint pt(point.x, point.y); int id = 0; pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::leftMouseEvent); handleTouchesMove(1, &id, &pt.x, &pt.y, event); event->release(); event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::movedMouseEvent); handleMouseMoved(pt.x, pt.y, event); event->release(); } break; case WM_MBUTTONDOWN: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate && MK_MBUTTON == wParam) { POINT point = { (short)LOWORD(lParam), (short)HIWORD(lParam) }; DPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::middleMouseEvent); handleOtherMouseDown(1, &id, &pt.x, &pt.y, event); event->release(); } } break; case WM_MBUTTONUP: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate) { POINT point = { (short)LOWORD(lParam), (short)HIWORD(lParam) }; DPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::middleMouseEvent); handleOtherMouseUp(1,&id, &pt.x, &pt.y, event); event->release(); } } break; case WM_LBUTTONDOWN: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate && MK_LBUTTON == wParam) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; DPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::leftMouseEvent); handleTouchesBegin(1, &id, &pt.x, &pt.y, event); event->release(); } } break; case WM_LBUTTONUP: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_bCaptured) { POINT point = {(short)LOWORD(lParam), (short)HIWORD(lParam)}; DPoint pt(point.x, point.y); int id = 0; pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::leftMouseEvent); handleTouchesEnd(1, &id, &pt.x, &pt.y, event); event->release(); ReleaseCapture(); m_bCaptured = false; } break; case WM_RBUTTONDOWN: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_pDelegate && MK_RBUTTON == wParam) { POINT point = { (short)LOWORD(lParam), (short)HIWORD(lParam) }; DPoint pt(point.x, point.y); pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { m_bCaptured = true; SetCapture(m_hWnd); int id = 0; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::rightMouseEvent); handleTouchesBegin(1, &id, &pt.x, &pt.y, event); event->release(); } } break; case WM_RBUTTONUP: #if(_MSC_VER >= 1600) // Don't process message generated by Windows Touch if (m_bSupportTouch && (s_pfGetMessageExtraInfoFunction() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) break; #endif /* #if(_MSC_VER >= 1600) */ if (m_bCaptured) { POINT point = { (short)LOWORD(lParam), (short)HIWORD(lParam) }; DPoint pt(point.x, point.y); int id = 0; pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::rightMouseEvent); handleTouchesEnd(1, &id, &pt.x, &pt.y, event); event->release(); ReleaseCapture(); m_bCaptured = false; } break; #if(_MSC_VER >= 1600) case WM_TOUCH: { BOOL bHandled = FALSE; UINT cInputs = LOWORD(wParam); PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs]; if (pInputs) { if (s_pfGetTouchInputInfoFunction((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))) { for (UINT i=0; i < cInputs; i++) { TOUCHINPUT ti = pInputs[i]; POINT input; input.x = TOUCH_COORD_TO_PIXEL(ti.x); input.y = TOUCH_COORD_TO_PIXEL(ti.y); ScreenToClient(m_hWnd, &input); DPoint pt(input.x, input.y); DPoint tmp = ccp(pt.x, m_obScreenSize.height - pt.y); if (m_obViewPortRect.equals(DRectZero) || m_obViewPortRect.containsPoint(tmp)) { pt.x /= m_fFrameZoomFactor; pt.y /= m_fFrameZoomFactor; CrossApp::CAEvent* event = new CrossApp::CAEvent(); event->setEventType(CrossApp::EventType::leftMouseEvent); if (ti.dwFlags & TOUCHEVENTF_DOWN) handleTouchesBegin(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y, event); else if (ti.dwFlags & TOUCHEVENTF_MOVE) handleTouchesMove(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y, event); else if (ti.dwFlags & TOUCHEVENTF_UP) handleTouchesEnd(1, reinterpret_cast<int*>(&ti.dwID), &pt.x, &pt.y, event); event->release(); } } bHandled = TRUE; } delete [] pInputs; } if (bHandled) { s_pfCloseTouchInputHandleFunction((HTOUCHINPUT)lParam); } } break; #endif /* #if(_MSC_VER >= 1600) */ case WM_SIZE: { static int oldWidth = 0, oldHeight = 0, windowState = 0; switch (wParam) { case SIZE_RESTORED: { if (windowState == 2) { CCApplication::sharedApplication()->applicationWillEnterForeground(); } else if (windowState == 1) { this->setFrameSize(oldWidth, oldHeight); CCApplication::sharedApplication()->applicationDidExitFullScreen(); } windowState = 0; } break; case SIZE_MAXIMIZED: { if (windowState == 2) { CCApplication::sharedApplication()->applicationWillEnterForeground(); } else if (windowState == 0) { oldWidth = m_obScreenSize.width * 2; oldHeight = m_obScreenSize.height * 2; RECT rt; SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0); // 获得工作区大小 int w = (rt.right - rt.left) * 2; int h = (rt.bottom - rt.top - 24) * 2; this->setFrameSize(w, h); CCApplication::sharedApplication()->applicationDidToggleFullScreen(); } windowState = 1; } break; case SIZE_MINIMIZED: { CCApplication::sharedApplication()->applicationDidEnterBackground(); windowState = 2; } break; } } break; case WM_KEYDOWN: switch (wParam) { case VK_F1: if (GetKeyState(VK_LSHIFT) < 0 || GetKeyState(VK_RSHIFT) < 0 || GetKeyState(VK_SHIFT) < 0) CAApplication::getApplication()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked); break; case VK_F2: if (GetKeyState(VK_LSHIFT) < 0 || GetKeyState(VK_RSHIFT) < 0 || GetKeyState(VK_SHIFT) < 0) CAApplication::getApplication()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeMenuClicked); break; case VK_ESCAPE: CAApplication::getApplication()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked); break; case VK_LEFT: CAIMEDispatcher::sharedDispatcher()->dispatchCursorMoveBackward(); break; case VK_RIGHT: CAIMEDispatcher::sharedDispatcher()->dispatchCursorMoveForward(); break; case VK_UP: CAIMEDispatcher::sharedDispatcher()->dispatchCursorMoveUp(); break; case VK_DOWN: CAIMEDispatcher::sharedDispatcher()->dispatchCursorMoveDown(); break; case 'C': case 'X': if (GetKeyState(VK_CONTROL) < 0) { if (wParam == 'C') { CAIMEDispatcher::sharedDispatcher()->dispatchCopyToClipboard(); } else { CAIMEDispatcher::sharedDispatcher()->dispatchCutToClipboard(); } } break; case 'V': if (GetKeyState(VK_CONTROL) < 0) { CAIMEDispatcher::sharedDispatcher()->dispatchPasteFromClipboard(); } break; case 'A': if (GetKeyState(VK_CONTROL) < 0) { CAIMEDispatcher::sharedDispatcher()->dispatchSelectAll(); } break; default: break; } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_KEYUP: if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } break; case WM_CHAR: { if (wParam < 0x20) { if (VK_BACK == wParam) { CAIMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); } else if (VK_RETURN == wParam) { CAIMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1); } else if (VK_TAB == wParam) { // tab input } else if (VK_ESCAPE == wParam) { // ESC input //CCDirector::sharedDirector()->end(); } } else if (wParam < 128) { // ascii char CAIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1); } else { char szUtf8[8] = {0}; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL); CAIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } } break; case WM_PAINT: PAINTSTRUCT ps; BeginPaint(m_hWnd, &ps); EndPaint(m_hWnd, &ps); break; case WM_CLOSE: CAApplication::getApplication()->end(); break; case WM_DESTROY: destroyGL(); PostQuitMessage(0); break; default: if (m_wndproc) { m_wndproc(message, wParam, lParam, &bProcessed); if (bProcessed) break; } return DefWindowProc(m_hWnd, message, wParam, lParam); } if (m_wndproc && !bProcessed) { m_wndproc(message, wParam, lParam, &bProcessed); } return 0; }
BOOL TSAPI BB_SetButtonsPos(TWindowData *dat) { HWND hwnd = dat->hwnd; if (!dat || !IsWindowVisible(hwnd)) return 0; RECT rect; int i; HWND hwndBtn = 0; BYTE gap = DPISCALEX_S(PluginConfig.g_iButtonsBarGap); bool showToolbar = !(dat->pContainer->dwFlags & CNT_HIDETOOLBAR); bool bBottomToolbar = (dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR) != 0; HDWP hdwp = BeginDeferWindowPos(LButtonsList.getCount() + RButtonsList.getCount() + 1); HWND hwndToggleSideBar = GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_TOGGLESIDEBAR : IDC_CHAT_TOGGLESIDEBAR); ShowWindow(hwndToggleSideBar, (showToolbar && dat->pContainer->SideBar->isActive()) ? SW_SHOW : SW_HIDE); mir_cslock lck(ToolBarCS); RECT rcSplitter; GetWindowRect(GetDlgItem(hwnd, (dat->bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter); POINT ptSplitter = { 0, rcSplitter.top }; ScreenToClient(hwnd, &ptSplitter); GetClientRect(hwnd, &rect); int splitterY = (!bBottomToolbar) ? ptSplitter.y - DPISCALEY_S(1) : rect.bottom; int tempL = dat->bbLSideWidth, tempR = dat->bbRSideWidth; int lwidth = 0, rwidth = 0; int iOff = DPISCALEY_S((PluginConfig.g_DPIscaleY > 1.0) ? (dat->bType == SESSIONTYPE_IM ? 22 : 23) : 22); int foravatar = 0; if ((rect.bottom - ptSplitter.y - (rcSplitter.bottom - rcSplitter.top) /*- DPISCALEY(2)*/ - (bBottomToolbar ? DPISCALEY_S(24) : 0) < dat->pic.cy - DPISCALEY_S(2)) && dat->showPic && !PluginConfig.m_AlwaysFullToolbarWidth) foravatar = dat->pic.cx + gap; if ((dat->pContainer->dwFlags & CNT_SIDEBAR) && (dat->pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_LEFT)) { DeferWindowPos(hdwp, hwndToggleSideBar, NULL, 4, 2 + splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE); lwidth += 10; tempL -= 10; } for (i = 0; i < LButtonsList.getCount(); i++) { CustomButtonData *cbd = LButtonsList[i]; if (((dat->bType == SESSIONTYPE_IM) && cbd->bIMButton) || ((dat->bType == SESSIONTYPE_CHAT) && cbd->bChatButton)) { hwndBtn = GetDlgItem(hwnd, cbd->dwButtonCID); if (!showToolbar) { ShowWindow(hwndBtn, SW_HIDE); DeferWindowPos(hdwp, hwndBtn, NULL, lwidth, splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE); if (IsWindowVisible(hwndBtn) || (cbd->bSeparator && !(cbd->bAutoHidden || cbd->bHidden))) lwidth += cbd->iButtonWidth + gap; if (!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn) && !cbd->bAutoHidden) cbd->bAutoHidden = 1; continue; } if (!cbd->bCanBeHidden && !cbd->bHidden && !(!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn) && !cbd->bAutoHidden)) { ShowWindow(hwndBtn, SW_SHOW); cbd->bAutoHidden = 0; } if (!cbd->bSeparator && !IsWindowVisible(hwndBtn) && !IsWindowEnabled(hwndBtn) && !cbd->bAutoHidden) tempL -= cbd->iButtonWidth + gap; if (cbd->bCanBeHidden && !cbd->bHidden && (cbd->bSeparator || !((!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn)) && !cbd->bAutoHidden))) { if (tempL + tempR > (rect.right - foravatar)) { ShowWindow(hwndBtn, SW_HIDE); cbd->bAutoHidden = 1; tempL -= cbd->iButtonWidth + gap; } else if (cbd->bAutoHidden) { ShowWindow(hwndBtn, SW_SHOW); cbd->bAutoHidden = 0; } } DeferWindowPos(hdwp, hwndBtn, NULL, lwidth, splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE);// SWP_NOCOPYBITS); if (IsWindowVisible(hwndBtn) || (cbd->bSeparator && !(cbd->bAutoHidden || cbd->bHidden))) lwidth += cbd->iButtonWidth + gap; } } if ((dat->pContainer->dwFlags & CNT_SIDEBAR) && (dat->pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_RIGHT)) { DeferWindowPos(hdwp, hwndToggleSideBar, NULL, rect.right - foravatar - 10, 2 + splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE); rwidth += 12; tempR -= 12; } for (i = 0; i < RButtonsList.getCount(); i++) { CustomButtonData *cbd = RButtonsList[i]; if (((dat->bType == SESSIONTYPE_IM) && cbd->bIMButton) || ((dat->bType == SESSIONTYPE_CHAT) && cbd->bChatButton)) { hwndBtn = GetDlgItem(hwnd, cbd->dwButtonCID); if (!showToolbar) { ShowWindow(hwndBtn, SW_HIDE); if (IsWindowVisible(hwndBtn) || (cbd->bSeparator && !(cbd->bAutoHidden || cbd->bHidden))) rwidth += cbd->iButtonWidth + gap; DeferWindowPos(hdwp, hwndBtn, NULL, rect.right - foravatar - rwidth + gap, splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE); if (!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn) && !cbd->bAutoHidden) cbd->bAutoHidden = 1; continue; } if (!cbd->bCanBeHidden && !cbd->bHidden && !((!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn)) && !cbd->bAutoHidden)) { ShowWindow(hwndBtn, SW_SHOW); cbd->bAutoHidden = 0; } if (!cbd->bSeparator && !IsWindowVisible(hwndBtn) && !IsWindowEnabled(hwndBtn) && !cbd->bAutoHidden) tempR -= cbd->iButtonWidth + gap; if (cbd->bCanBeHidden && !cbd->bHidden && (cbd->bSeparator || !((!IsWindowEnabled(hwndBtn) && !IsWindowVisible(hwndBtn)) && !cbd->bAutoHidden))) { if (tempL + tempR > (rect.right - foravatar)) { ShowWindow(hwndBtn, SW_HIDE); cbd->bAutoHidden = 1; tempR -= cbd->iButtonWidth + gap; } else if (cbd->bAutoHidden) { ShowWindow(hwndBtn, SW_SHOW); cbd->bAutoHidden = 0; } } if (IsWindowVisible(hwndBtn) || (cbd->bSeparator && !(cbd->bAutoHidden || cbd->bHidden))) rwidth += cbd->iButtonWidth + gap; DeferWindowPos(hdwp, hwndBtn, NULL, rect.right - foravatar - rwidth + gap, splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } } return EndDeferWindowPos(hdwp); }
void TEditBarWindow::WMLButtonUp(TMessage&) { POINT Point; int i, j, temp; RECT Rect; BITMAP Bitmap; HBITMAP hBitmap, hOldBmp, hMaskBmp; HDC hDC = GetDC(HWindow); HDC hMemoryDC = CreateCompatibleDC(hDC); int PreviousItem = SelectedItem; GetCursorPos( &Point ); ScreenToClient(HWindow, &Point); for (i = 0; i < 6; i++) for (j = 0; j < 2; j++) { Rect.left = (j * SQUARE_SIZE) + 3; Rect.right = Rect.left + SQUARE_SIZE; Rect.top = (i * SQUARE_SIZE) + 3; Rect.bottom = Rect.top + SQUARE_SIZE; if (PtInRect(&Rect, Point)) SelectedItem = (i + ((j) ? 6 : 0)); } if (SelectedItem == PreviousItem) return; GetObject(PieceBmpArray[0][white], sizeof(BITMAP), (LPSTR)&Bitmap); temp = PreviousItem % 6; hBitmap = PieceBmpArray[temp][(PreviousItem < 6) ? white : black]; hMaskBmp = MaskArray[temp]; hOldBmp = (HBITMAP)SelectObject(hMemoryDC, hMaskBmp); BitBlt(hDC, (PreviousItem < 6) ? 3 : 3 + SQUARE_SIZE, 3 + (SQUARE_SIZE * temp), Bitmap.bmWidth, Bitmap.bmHeight, hMemoryDC, 0, 0, SRCERASE); SelectObject(hMemoryDC, hBitmap); BitBlt(hDC, (PreviousItem < 6) ? 3 : 3 + SQUARE_SIZE, 3 + (SQUARE_SIZE * temp), Bitmap.bmWidth, Bitmap.bmHeight, hMemoryDC, 0, 0, SRCINVERT); SelectObject(hMemoryDC, hOldBmp); temp = SelectedItem % 6; hBitmap = PieceBmpArray[temp][(SelectedItem < 6) ? white : black]; hMaskBmp = MaskArray[temp]; hOldBmp = (HBITMAP)SelectObject(hMemoryDC, hMaskBmp); BitBlt(hDC, (SelectedItem < 6) ? 3 : 3 + SQUARE_SIZE, 3 + (SQUARE_SIZE * temp), Bitmap.bmWidth, Bitmap.bmHeight, hMemoryDC, 0, 0, SRCAND); SelectObject(hMemoryDC, hBitmap); BitBlt(hDC, (SelectedItem < 6) ? 3 : 3 + SQUARE_SIZE, 3 + (SQUARE_SIZE * temp), Bitmap.bmWidth, Bitmap.bmHeight, hMemoryDC, 0, 0, NOTSRCERASE); SelectObject(hMemoryDC, hOldBmp); DeleteDC(hMemoryDC); ReleaseDC(HWindow, hDC); }
int mxExpressionTray::handleEvent (mxEvent *event) { MDLCACHE_CRITICAL_SECTION_( g_pMDLCache ); int iret = 0; if ( HandleToolEvent( event ) ) { return iret; } switch ( event->event ) { case mxEvent::Action: { iret = 1; switch ( event->action ) { default: iret = 0; break; case IDC_EXPRESSIONCLASS: { int index = g_pExpressionClass->getSelectedIndex(); if ( index >= 0 ) { CExpClass *current = expressions->GetClass( index ); if ( current ) { // Switch classname expressions->ActivateExpressionClass( current ); current->SelectExpression( 0 ); } } } break; case IDC_CONTEXT_NEWEXP: g_pFlexPanel->NewExpression(); break; case IDC_CONTEXT_EDITEXP: if ( m_nClickedCell != -1 ) { g_pFlexPanel->EditExpression(); } break; case IDC_CONTEXT_REVERT: if ( m_nClickedCell != -1 ) { g_pFlexPanel->RevertExpression( m_nClickedCell ); } break; case IDC_CONTEXT_SAVEEXP: if ( m_nClickedCell != -1 ) { g_pFlexPanel->SaveExpression( m_nClickedCell ); } break; case IDC_CONTEXT_DELETEXP: if ( m_nClickedCell != -1 ) { g_pControlPanel->DeleteExpression( m_nClickedCell ); } break; case IDC_TRAYSCROLL: { if (event->modifiers == SB_THUMBTRACK) { int offset = event->height; slScrollbar->setValue( offset ); m_nTopOffset = offset; redraw(); } else if ( event->modifiers == SB_PAGEUP ) { int offset = slScrollbar->getValue(); offset -= m_nGranularity; offset = max( offset, slScrollbar->getMinValue() ); slScrollbar->setValue( offset ); InvalidateRect( (HWND)slScrollbar->getHandle(), NULL, TRUE ); m_nTopOffset = offset; redraw(); } else if ( event->modifiers == SB_PAGEDOWN ) { int offset = slScrollbar->getValue(); offset += m_nGranularity; offset = min( offset, slScrollbar->getMaxValue() ); slScrollbar->setValue( offset ); InvalidateRect( (HWND)slScrollbar->getHandle(), NULL, TRUE ); m_nTopOffset = offset; redraw(); } } break; case IDC_AB: { AB(); } break; case IDC_THUMBNAIL_INCREASE: { ThumbnailIncrease(); } break; case IDC_THUMBNAIL_DECREASE: { ThumbnailDecrease(); } break; case IDC_CONTEXT_CREATEBITMAP: { if ( m_nClickedCell >= 0 ) { CExpClass *active = expressions->GetActiveClass(); if ( active ) { CExpression *exp = active->GetExpression( m_nClickedCell ); if ( exp ) { active->SelectExpression( m_nClickedCell ); exp->CreateNewBitmap( models->GetActiveModelIndex() ); redraw(); } } } } break; } break; } case mxEvent::MouseDown: { if ( !( event->buttons & mxEvent::MouseRightButton ) ) { // Figure out cell # int cell = GetCellUnderPosition( event->x, event->y ); CExpClass *active = expressions->GetActiveClass(); if ( active ) { if ( cell == m_nCurCell && cell >= 0 && cell < active->GetNumExpressions() ) { mxETButton *btn = GetItemUnderCursor( event->x, event->y ); if ( btn && btn->m_fnCallback ) { (this->*(btn->m_fnCallback))( cell ); return iret; } } if ( cell >= 0 && cell < active->GetNumExpressions() ) { active->SelectExpression( cell, event->modifiers & mxEvent::KeyShift ? false : true ); int cx, cy, cw, ch; if ( ComputeRect( cell, cx, cy, cw, ch ) ) { m_bDragging = true; m_nDragCell = cell; m_nXStart = (short)event->x; m_nYStart = (short)event->y; m_rcFocus.left = cx; m_rcFocus.top = cy; m_rcFocus.right = cx + cw; m_rcFocus.bottom = cy + ch - m_nDescriptionHeight; POINT pt; pt.x = pt.y = 0; ClientToScreen( (HWND)getHandle(), &pt ); OffsetRect( &m_rcFocus, pt.x, pt.y ); m_rcOrig = m_rcFocus; DrawFocusRect(); } } else { Deselect(); active->DeselectExpression(); redraw(); } } } iret = 1; } break; case mxEvent::MouseDrag: { if ( m_bDragging ) { // Draw drag line of some kind DrawFocusRect(); // update pos m_rcFocus = m_rcOrig; OffsetRect( &m_rcFocus, ( (short)event->x - m_nXStart ), ( (short)event->y - m_nYStart ) ); DrawFocusRect(); } iret = 1; } break; case mxEvent::MouseUp: { iret = 1; if ( event->buttons & mxEvent::MouseRightButton ) { SetClickedCell( GetCellUnderPosition( (short)event->x, (short)event->y ) ); ShowRightClickMenu( (short)event->x, (short)event->y ); return iret; } int cell = GetCellUnderPosition( event->x, event->y ); CExpClass *active = expressions->GetActiveClass(); if ( m_bDragging ) { DrawFocusRect(); m_bDragging = false; // See if we let go on top of the choreo view if ( active ) { // Convert x, y to screen space POINT pt; pt.x = (short)event->x; pt.y = (short)event->y; ClientToScreen( (HWND)getHandle(), &pt ); HWND maybeTool = WindowFromPoint( pt ); // Now tell choreo view CExpression *exp = active->GetExpression( m_nDragCell ); if ( exp && maybeTool ) { if ( IsWindowOrChild( g_pChoreoView, maybeTool ) ) { if ( g_pChoreoView->CreateExpressionEvent( pt.x, pt.y, active, exp ) ) { return iret; } } if ( IsWindowOrChild( g_pExpressionTool, maybeTool ) ) { if ( g_pExpressionTool->SetFlexAnimationTrackFromExpression( pt.x, pt.y, active, exp ) ) { return iret; } } } } } if ( active ) { // Over a new cell if ( cell >= 0 && cell < active->GetNumExpressions() && cell != m_nCurCell && m_nCurCell != -1 ) { // Swap cells CExpression *exp = active->GetExpression( m_nCurCell ); if ( exp ) { active->SwapExpressionOrder( m_nCurCell, cell ); active->SetDirty( true ); active->SelectExpression( cell ); } } } } break; case mxEvent::Size: { int width = w2(); int ch = GetCaptionHeight(); g_pExpressionClass->setBounds( 5, 5 + ch, width - 120, 20 ); m_pABButton->setBounds( width - 60, 4 + ch, 60, 16 ); m_pThumbnailIncreaseButton->setBounds( width - 60 - 40, 4 + ch, 16, 16 ); m_pThumbnailDecreaseButton->setBounds( width - 60 - 20, 4 + ch, 16, 16 ); m_nTopOffset = 0; RepositionSlider(); redraw(); iret = 1; } break; case mxEvent::MouseWheeled: { // Figure out cell # POINT pt; pt.x = event->x; pt.y = event->y; ScreenToClient( (HWND)getHandle(), &pt ); if ( event->height < 0 ) { m_nTopOffset = min( m_nTopOffset + 10, slScrollbar->getMaxValue() ); } else { m_nTopOffset = max( m_nTopOffset - 10, 0 ); } RepositionSlider(); redraw(); iret = 1; } break; }; if ( iret ) { SetActiveTool( this ); } return iret; }
slide_show(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop) { EXDLL_INIT(); slide_abort(); // argument default values iHAlign = HALIGN_CENTER; iVAlign = VALIGN_CENTER; iFit = FIT_BOTH; g_hWnd = NULL; captionColor = RGB(255,255,255); int duration = 1000; // transition duration in ms (default = 1s) TCHAR caption[MAX_PATH]; caption[0] = '\0'; // parse arguments TCHAR arg[MAX_PATH]; LPTSTR argValue; while(!popstring(arg, sizeof arg) && *arg == '/' && (argValue = StrChr(arg, '=')) != NULL) { *argValue++ = '\0'; // replace '=' by '\0' if(lstrcmpi(arg, TEXT("/hwnd")) == 0) StrToIntEx(argValue, STIF_SUPPORT_HEX, (int*) &g_hWnd); else if(lstrcmpi(arg, TEXT("/fit")) == 0) { if(lstrcmpi(argValue, TEXT("height")) == 0) iFit = FIT_HEIGHT; else if(lstrcmpi(argValue, TEXT("width")) == 0) iFit = FIT_WIDTH; else if(lstrcmpi(argValue, TEXT("stretch")) == 0) iFit = FIT_STRETCH; } else if(lstrcmpi(arg, TEXT("/halign")) == 0) { if(lstrcmpi(argValue, TEXT("left")) == 0) iHAlign = HALIGN_LEFT; else if(lstrcmpi(argValue, TEXT("right")) == 0) iHAlign = HALIGN_RIGHT; } else if(lstrcmpi(arg, TEXT("/valign")) == 0) { if(lstrcmpi(argValue, TEXT("top")) == 0) iVAlign = VALIGN_TOP; else if(lstrcmpi(argValue, TEXT("bottom")) == 0) iVAlign = VALIGN_BOTTOM; } else if(lstrcmpi(arg, TEXT("/duration")) == 0) StrToIntEx(argValue, STIF_SUPPORT_HEX, &duration); else if(lstrcmpi(arg, TEXT("/caption")) == 0) lstrcpy(caption, argValue); else if(lstrcmpi(arg, TEXT("/ccolor")) == 0) StrToIntEx(argValue, STIF_SUPPORT_HEX, (int*) &captionColor); else if(lstrcmpi(arg, TEXT("/auto")) == 0) { lstrcpy(g_autoPath, argValue); PathRemoveFileSpec(g_autoPath); HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, 32767*sizeof(TCHAR)); DWORD count = GetPrivateProfileSection(getuservariable(INST_LANG), LPTSTR(hMem), 32767, argValue); if (count == 0) { count = GetPrivateProfileSection(TEXT("1033"), LPTSTR(hMem), 32767, argValue); if (count == 0) count = GetPrivateProfileSection(TEXT("0"), LPTSTR(hMem), 32767, argValue); } if (count) { g_autoBuffer = LPTSTR(GlobalReAlloc(hMem, (count+1)*sizeof(TCHAR), 0)); g_autoNext = g_autoBuffer; } else GlobalFree(hMem); } } // if target window not defined we'll search for default (the details listview) if (g_hWnd == NULL) { g_hWnd = FindWindowEx(hwndParent, NULL, TEXT("#32770"), NULL); if (g_hWnd == NULL) return; hwndParent = FindWindowEx(hwndParent, g_hWnd, TEXT("#32770"), NULL); if (hwndParent != NULL && !IsWindowVisible(hwndParent)) g_hWnd = hwndParent; if (g_hWnd == NULL) return; HWND hWnd = GetDlgItem(g_hWnd, 1016); GetWindowRect(hWnd, &rDest); ScreenToClient(g_hWnd, (LPPOINT) &rDest.left); ScreenToClient(g_hWnd, (LPPOINT) &rDest.right); } else GetClientRect(g_hWnd, &rDest); // load new image if (arg[0] == '\0') return; // stop here if no filename if (g_autoNext != NULL) slide_NextAuto(); else slide_NewImage(arg, caption, duration); }
void vmsGetItButton::Create(HWND hwndParent, const RECT* prcFlash) { if (m_hWnd) return; m_hWnd = CreateWindowEx (0, _T ("{E93F4E35-5841-41e7-AFF6-F456BBAE488B}"), NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwndParent, NULL, _Module.GetModuleInstance (), NULL); m_hwndTB = CreateWindow (TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_LIST | CCS_NODIVIDER | CCS_NORESIZE | CCS_NOPARENTALIGN, 0, 0, 16+70, 16+7, m_hWnd, NULL, _Module.GetModuleInstance (), NULL); SendMessage (m_hwndTB, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS); SetWindowLongPtr (m_hwndTB, GWL_USERDATA, (LONG_PTR)this); SetWindowLongPtr (m_hWnd, GWL_USERDATA, (LONG_PTR)this); SendMessage (m_hwndTB, TB_BUTTONSTRUCTSIZE, sizeof (TBBUTTON), 0); tstring str = vmsFdmTranslations::o ().GetString (L_DLBYFDM); if (str.empty ()) str = _T("Download with FDM"); USES_CONVERSION; SendMessage (m_hwndTB, TB_ADDSTRING, 0, (LPARAM)str.c_str ()); SendMessage (m_hwndTB, TB_SETBITMAPSIZE, 0, MAKELONG (16, 16)); SendMessage (m_hwndTB, TB_SETIMAGELIST, 0, (LPARAM)m_hImgs); TBBUTTON btn = {0}; btn.iBitmap = 0; btn.idCommand = ID_DOWNLOAD_IT; btn.fsState = TBSTATE_ENABLED; btn.fsStyle = TBSTYLE_BUTTON | TBSTYLE_DROPDOWN; btn.dwData = 0; btn.iString = 0; SendMessage (m_hwndTB, TB_ADDBUTTONS, 1, (LPARAM)&btn); RECT rc; SendMessage (m_hwndTB, TB_GETRECT, btn.idCommand, (LPARAM)&rc); int x, y; int cx = rc.right - rc.left; int cy = rc.bottom - rc.top; if (prcFlash == NULL) { POINT pt; GetCursorPos (&pt); ScreenToClient (hwndParent, &pt); x = pt.x += 10, y = pt.y -= 50; RECT rc0; GetClientRect (hwndParent, &rc0); if (x + cx >= rc0.right) x = rc0.right - cx - 1; if (x < 0) x = 0; if (y < 0) y = 0; } else { RECT rc; GetWindowRect (hwndParent, &rc); POINT pt; if (prcFlash->top - rc.top >= cy) pt.y = prcFlash->top - cy; else pt.y = prcFlash->bottom; if (prcFlash->left >= rc.left) pt.x = prcFlash->left; else pt.x = rc.left; ScreenToClient (hwndParent, &pt); x = pt.x; y = pt.y; } SetWindowPos (m_hWnd, NULL, x, y, cx, cy, SWP_NOZORDER); SetWindowPos (m_hwndTB, NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOZORDER); HRGN hRgn = CreateRoundRectRgn (0, 0, cx + 1, cy + 1, 3, 3); SetWindowRgn (m_hWnd, hRgn, TRUE); }
/* * Obtain the hyperlink located at the * mouse position. If there is no hyperlink * at the mouse position return NULL. */ TCHAR *GetHyperlink( LPCLASSDATA lpcd ) { POINT ptStart, ptEnd, ptMousePos; /* * Are we parsing hyperlinks? */ if ( Parser->bParseHyperLinks ) { /* * Get mouse position and convert * to client coordinates. */ GetCursorPos( &ptMousePos ); ScreenToClient( lpcd->hWnd, &ptMousePos ); /* * Skip selection margin. */ ptMousePos.x -= ( GetMarginWidth( lpcd ) + GetLineMarginWidth( lpcd )); /* * Convert the coordinates to the character * position. */ if ( MouseToCaret( lpcd, ptMousePos.x, ptMousePos.y, &ptMousePos )) { /* * Check if the character is located inside * a hyperlink. */ if ( CheckForHyperlink( lpcd, &ptMousePos, &ptStart, &ptEnd, FALSE )) { /* * Allocate memory to store the * hyperlink text. */ TCHAR *pszUrl = AllocPooled( lpcd->pMemPool, REAL_SIZE( ptEnd.x - ptStart.x + 2 )); if ( pszUrl ) { /* * Copy the hyperlink text into the * allocated buffer. */ LPLINE lpLine = ( LPLINE )ArrayGetAt( lpcd->lpLines, ptStart.y ); memcpy( pszUrl, &lpLine->pcText[ ptStart.x ], ptEnd.x - ptStart.x + 1 ); /* * 0-terminate to be on the safe side. */ pszUrl[ ptEnd.x - ptStart.x + 1 ] = 0; return pszUrl; } } } } /* * No hyperlink or memory failure... */ return NULL; }
LRESULT playlist_view::on_message(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_NCCREATE: wnd_playlist = wnd; initialised = true; list_playlist.add_item(this); g_playlist_message_window.add_ref(); break; case WM_CREATE: { pfc::com_ptr_t<IDropTarget_playlist> IDT_playlist = new IDropTarget_playlist(this); RegisterDragDrop(wnd, IDT_playlist.get_ptr()); if (true) { m_theme = IsThemeActive() && IsAppThemed() ? OpenThemeData(wnd, L"ListView") : NULL; SetWindowTheme(wnd, L"Explorer", NULL); } m_always_show_focus = config_object::g_get_data_bool_simple(standard_config_objects::bool_playback_follows_cursor, false); on_playlist_font_change(); create_header(true); drawing_enabled = true; m_cache.initialise(); } return 0; case WM_DESTROY: m_edit_save = false; exit_inline_edit(); m_cache.deinitialise(); RevokeDragDrop(wnd); SendMessage(wnd, WM_SETFONT, 0, 0); SendMessage(wnd_header, WM_SETFONT, 0, 0); { if (m_theme) CloseThemeData(m_theme); m_theme = NULL; } m_selection_holder.release(); break; case WM_NCDESTROY: g_playlist_message_window.release(); wnd_playlist = 0; initialised = false; list_playlist.remove_item(this); m_shown = false; // if (!list_playlist.get_count()) // { // g_playlist_entries.rebuild_all(); // } break; case WM_THEMECHANGED: { if (m_theme) CloseThemeData(m_theme); m_theme = IsThemeActive() && IsAppThemed() ? OpenThemeData(wnd, L"ListView") : 0; } break; case WM_SHOWWINDOW: if (wp == TRUE && lp == 0 && !m_shown) { static_api_ptr_t<playlist_manager> playlist_api; ensure_visible(playlist_api->activeplaylist_get_focus_item()); m_shown = true; } break; case WM_WINDOWPOSCHANGED: { LPWINDOWPOS lpwp = (LPWINDOWPOS)lp; if (!(lpwp->flags & SWP_NOSIZE)) { on_size(lpwp->cx, lpwp->cy); } } break; case WM_ERASEBKGND: return TRUE; break; case WM_PAINT: { PAINTSTRUCT ps; HDC dc_paint = BeginPaint(wnd, &ps); RECT rc_update, rc_playlist; get_playlist_rect(&rc_playlist); rc_update = ps.rcPaint; if (rc_update.top<rc_playlist.top) rc_update.top = rc_playlist.top; if (rc_update.bottom >= rc_update.top) { int item_height = get_item_height(); int start_item = (rc_update.top - rc_playlist.top) / item_height; int end_item = (rc_update.bottom - rc_playlist.top) / item_height; if (((end_item - start_item) + 1)*item_height < rc_update.bottom - rc_update.top) end_item++; { draw_items(dc_paint, start_item, 1 + (end_item - start_item)); } } EndPaint(wnd, &ps); } return 0; case WM_SETREDRAW: drawing_enabled = (wp != 0); return 0; case WM_MOUSEACTIVATE: if (GetFocus() != wnd) m_no_next_edit = true; return MA_ACTIVATE; case WM_UPDATEUISTATE: RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE); break; case WM_KILLFOCUS: RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); m_selection_holder.release(); break; case WM_SETFOCUS: //if (msg == WM_SETFOCUS && (HWND)wp != wnd) //m_no_next_edit = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); m_selection_holder = static_api_ptr_t<ui_selection_manager>()->acquire(); m_selection_holder->set_playlist_selection_tracking(); break; case WM_GETDLGCODE: return DLGC_WANTALLKEYS; case WM_KEYDOWN: { static_api_ptr_t<playlist_manager> playlist_api; uie::window_ptr p_this = this; //DWORD vk_slash = VkKeyScan('/'); if (wp == VK_CONTROL) g_drag_lmb = true; if (m_prevent_wm_char_processing = process_keydown(msg, lp, wp, true)) return 0; else { SendMessage(wnd, WM_CHANGEUISTATE, MAKEWPARAM(UIS_CLEAR, UISF_HIDEFOCUS), NULL); if (wp == VK_HOME || wp == VK_DOWN || wp == VK_END || wp == VK_PRIOR || wp == VK_NEXT || wp == VK_UP) { int focus = playlist_api->activeplaylist_get_focus_item(); int total = playlist_api->activeplaylist_get_item_count(); if ((wp == VK_HOME || wp == VK_PRIOR || wp == VK_UP)) { // if (focus == 0) return 0; } if ((wp == VK_END || wp == VK_NEXT || wp == VK_DOWN)) { // if (focus == total - 1) return 0; } SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_PAGE | SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int offset = 0; int scroll = scroll_item_offset; if (wp == VK_HOME) scroll = 0; else if (wp == VK_PRIOR && focus == scroll_item_offset) scroll -= si.nPage; else if (wp == VK_UP) { if (focus <= scroll_item_offset) scroll = focus - 1; else if (focus > si.nPos + si.nPage - 1) scroll = focus - 1 - si.nPage + 1; } else if (wp == VK_DOWN) { if (focus < scroll_item_offset) scroll = focus + 1; else if (focus >= si.nPos + si.nPage - 1) scroll = focus + 1 - si.nPage + 1; } else if (wp == VK_END) scroll = total - 1; else if (wp == VK_NEXT && focus == si.nPos + si.nPage - 1) scroll += si.nPage; drawing_enabled = false; si.nPos = scroll; si.fMask = SIF_POS; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (wp == VK_HOME) offset = 0 - focus; else if (wp == VK_PRIOR) offset = scroll_item_offset - focus; else if (wp == VK_END) offset = total - focus - 1; else if (wp == VK_NEXT) offset = get_last_viewable_item() - focus; else if (wp == VK_DOWN) offset = 1; else if (wp == VK_UP) offset = -1; //if (offset) process_keydown(offset, ((HIWORD(lp) & KF_ALTDOWN) != 0), drawing_enabled, (HIWORD(lp) & KF_REPEAT) != 0); drawing_enabled = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); return 0; } else if (wp == VK_SPACE) { int focus = playlist_api->activeplaylist_get_focus_item(); set_sel_single(focus, true, false, false); return 0; } else if (wp == VK_RETURN) { bool ctrl_down = 0 != (GetKeyState(VK_CONTROL) & KF_UP); int focus = playlist_api->activeplaylist_get_focus_item(); unsigned active = playlist_api->get_active_playlist(); if (ctrl_down) { if (active != -1 && focus != -1) playlist_api->queue_add_item_playlist(active, focus); } else { // playlist_api->set_playing_playlist(active); unsigned focus = playlist_api->activeplaylist_get_focus_item(); //unsigned active = playlist_api->get_active_playlist(); //playlist_api->playlist_set_playback_cursor(active, focus); playlist_api->activeplaylist_execute_default_action(focus); //static_api_ptr_t<play_control>()->play_start(play_control::track_command_settrack); } return 0; } else if (wp == VK_SHIFT) { if (!(HIWORD(lp) & KF_REPEAT)) g_shift_item_start = playlist_api->activeplaylist_get_focus_item(); } else if (wp == VK_F2) { unsigned count = g_get_cache().active_column_get_active_count(); if (count) { unsigned focus = playlist_api->activeplaylist_get_focus_item(); if (focus != pfc_infinite) { t_size i, pcount = playlist_api->activeplaylist_get_item_count(); bit_array_bittable sel(pcount); playlist_api->activeplaylist_get_selection_mask(sel); pfc::list_t<t_size> indices; indices.prealloc(32); for (i = 0; i<pcount; i++) if (sel[i]) indices.add_item(i); /*t_size start = focus, end = focus; if (sel[start] && pcount) { while (start>0 && sel[start-1]) start--; while (end<pcount-1 && sel[end+1]) end++; }*/ unsigned count = g_get_cache().active_column_get_active_count(); unsigned column; for (column = 0; column<count; column++) { if (!g_get_columns()[g_get_cache().active_column_active_to_actual(column)]->edit_field.is_empty()) { //create_inline_edit_v2(start, end-start+1, column); create_inline_edit_v2(indices, column); break; } } } } } else if (wp == VK_DELETE) { playlist_api->activeplaylist_undo_backup(); playlist_api->activeplaylist_remove_selection(); } else if (wp == VK_F3) { standard_commands::main_playlist_search(); } /*else if (vk_slash != -1 && wp == LOWORD(vk_slash)) { HWND wnd_search = m_searcher.create(wnd); on_size(); ShowWindow(wnd_search, SW_SHOWNORMAL); ; }*/ } } break; case WM_CHAR: if (!m_prevent_wm_char_processing) { //if (!(HIWORD(lp) & KF_REPEAT)) { if ((GetKeyState(VK_CONTROL) & KF_UP)) { static_api_ptr_t<playlist_manager> playlist_api; if (wp == 1) //Ctrl-A { playlist_api->activeplaylist_set_selection(bit_array_true(), bit_array_true()); return 0; } else if (wp == 26) //Ctrl-Z { playlist_api->activeplaylist_undo_restore(); return 0; } else if (wp == 25) //Ctrl-Y { playlist_api->activeplaylist_redo_restore(); return 0; } else if (wp == 24) //Ctrl-X { playlist_utils::cut(); return 0; } else if (wp == 3) //Ctrl-C { playlist_utils::copy(); return 0; } else if (wp == 6) //Ctrl-F { standard_commands::main_playlist_search(); return 0; } else if (wp == 22) //Ctrl-V { playlist_utils::paste(wnd); return 0; } } } } break; case WM_KEYUP: if (process_keydown(msg, lp, wp, true)) return 0; break; case WM_SYSKEYUP: if (process_keydown(msg, lp, wp, true)) return 0; break; case WM_SYSKEYDOWN: { uie::window_ptr p_this = this; if (m_prevent_wm_char_processing = process_keydown(msg, lp, wp, true)) return 0; } break; case WM_LBUTTONDOWN: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; SendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } bool b_was_focused = GetFocus() == wnd; if (!b_was_focused) m_no_next_edit = true; //#ifdef INLINE_EDIT exit_inline_edit(); // g_no_next_edit = false; //#endif dragged = false; SetFocus(wnd); SetCapture(wnd); static_api_ptr_t<playlist_manager> playlist_api; g_drag_lmb = true; int focus = playlist_api->activeplaylist_get_focus_item(); drag_start_lmb.x = GET_X_LPARAM(lp); drag_start_lmb.y = GET_Y_LPARAM(lp); int item_height = get_item_height(); int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); // int idx = ((GET_Y_LPARAM(lp) -get_header_height()) / item_height) + scroll_item_offset; // if( idx >= 0 && idx <playlist_api->activeplaylist_get_item_count() && GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual()) if (idx >= 0) { // playlist_oper * playlist_api = playlist_api; // playlist_api->set_playback_cursor(idx); //#ifdef INLINE_EDIT m_prev_sel = (playlist_api->activeplaylist_is_item_selected(idx) && !m_wnd_edit && (playlist_api->activeplaylist_get_selection_count(2) == 1)); //#endif if (!is_visible(idx)) SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); if (wp & MK_CONTROL && wp & MK_SHIFT) { playlist_api->activeplaylist_move_selection(idx - focus); dragged = true; drag_type = 0; } else if (wp & MK_SHIFT) { drag_type = 2; dragitem = idx, dragstartitem = idx; int n = (cfg_alternative_sel ? focus : g_shift_item_start), t = idx; bool focus_sel = playlist_api->activeplaylist_is_item_selected(focus); set_sel_range(n, t, (cfg_alternative_sel != 0), (cfg_alternative_sel ? !focus_sel : false)); playlist_api->activeplaylist_set_focus_item(idx); dragged = true; } else if (wp & MK_CONTROL) { /* drag_type = 2; dragitem = idx,dragstartitem=idx; set_sel_single(idx, false, true, false); dragged = true;*/ } else if (playlist_api->activeplaylist_is_item_selected(idx)) { drag_type = 1; dragitem = idx, dragstartitem = idx; playlist_api->activeplaylist_undo_backup(); playlist_api->activeplaylist_set_focus_item(idx); dragged = false; } else { drag_type = 2; dragitem = idx, dragstartitem = idx;//item irrelevant actually; set_sel_single(idx, false, true, true); /* bit_array_bittable mask(playlist_api->activeplaylist_get_item_count()); // playlist_api->activeplaylist_is_item_selected_mask(mask); int n, t = playlist_api->activeplaylist_get_item_count(); for (n = 0;n <t;n++) { if (n==idx) mask.set(n, true); else mask.set(n, false); } console::info("crap"); playlist_api->set_sel_mask(mask); playlist_api->activeplaylist_set_focus_item(idx);*/ dragged = false; } } else { // console::info("wow"); // bit_array_bittable mask(playlist_api->activeplaylist_get_item_count()); playlist_api->activeplaylist_set_selection(bit_array_true(), bit_array_false()); dragged = true; drag_type = 0; } } break; case WM_RBUTTONUP: m_no_next_edit = false; break; case WM_MBUTTONUP: { m_no_next_edit = false; unsigned idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); playlist_mclick_actions::run(cfg_playlist_middle_action, idx != -1, idx); } break; case WM_LBUTTONUP: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; SendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } ReleaseCapture(); g_drag_lmb = false; int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); //((GET_Y_LPARAM(lp) -get_header_height()) / get_item_height()) + scroll_item_offset; static_api_ptr_t<playlist_manager> playlist_api; if (!dragged) { if (wp & MK_CONTROL) { // int idx_down = hittest_item(drag_start_lmb.x, drag_start_lmb.y); if (idx >= 0) set_sel_single(idx, true, true, false); } else { // int item_height = get_item_height(); // int idx = ((GET_Y_LPARAM(lp) - get_header_height()) / item_height) + scroll_item_offset; if (idx >= 0 /*&& idx < playlist_api->activeplaylist_get_item_count() && (GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual())*/) { if (!m_no_next_edit && cfg_inline_edit && playlist_api->activeplaylist_is_item_selected(idx) && m_prev_sel /*&& !dragged*/) { //if (m_no_next_edit && GetCapture() == wnd) ReleaseCapture(); { exit_inline_edit(); if (main_window::config_get_inline_metafield_edit_mode() != main_window::mode_disabled) { m_edit_index = idx; long width; m_edit_column = hittest_column(GET_X_LPARAM(lp), width); if (m_edit_column >= 0 && !g_get_columns()[g_get_cache().active_column_active_to_actual(m_edit_column)]->edit_field.is_empty()) { m_edit_timer = (SetTimer(wnd, EDIT_TIMER_ID, GetDoubleClickTime(), 0) != 0); } } } } int focus = playlist_api->activeplaylist_get_focus_item(); set_sel_single(focus, false, false, true); } } } dragged = true; drag_type = 0; dragstartitem = 0; dragitem = 0; //#ifdef INLINE_EDIT m_no_next_edit = false; //#endif } break; case WM_MOUSEMOVE: { if (0 && g_tooltip) { MSG message; memset(&message, 0, sizeof(MSG)); message.hwnd = wnd; message.message = msg; message.wParam = wp; message.lParam = lp; SendMessage(g_tooltip, TTM_RELAYEVENT, 0, (LPARAM)&message); } const unsigned cx_drag = (unsigned)abs(GetSystemMetrics(SM_CXDRAG)); const unsigned cy_drag = (unsigned)abs(GetSystemMetrics(SM_CYDRAG)); if (!g_dragging && ((g_dragging1 && wp & MK_RBUTTON && (abs(drag_start.x - GET_X_LPARAM(lp)) > cx_drag || abs(drag_start.y - GET_Y_LPARAM(lp)) > cy_drag)) || (g_drag_lmb && (wp & MK_LBUTTON) && (wp & MK_CONTROL) && (abs(drag_start_lmb.x - GET_X_LPARAM(lp)) > 3 || abs(drag_start_lmb.y - GET_Y_LPARAM(lp)) > 3)))) { static_api_ptr_t<playlist_manager> playlist_api; metadb_handle_list data; playlist_api->activeplaylist_get_selected_items(data); if (data.get_count() > 0) { static_api_ptr_t<playlist_incoming_item_filter> incoming_api; IDataObject * pDataObject = incoming_api->create_dataobject(data); if (pDataObject) { //RegisterClipboardFormat(_T("foo_ui_columns"); if (g_tooltip) { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } DWORD blah; { pfc::com_ptr_t<IDropSource_playlist> p_IDropSource_playlist = new IDropSource_playlist(this); SHDoDragDrop(get_wnd(), pDataObject, p_IDropSource_playlist.get_ptr(), DROPEFFECT_COPY, &blah); } pDataObject->Release(); } } data.remove_all(); g_dragging = false; g_dragging1 = false; g_drag_lmb = false; if (wp & MK_LBUTTON) { dragged = true; drag_type = 0; dragstartitem = 0; dragitem = 0; } } if (cfg_tooltip && (GET_Y_LPARAM(lp) > get_header_height())) { int item_height = get_item_height(); int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); long cx; int column = hittest_column(GET_X_LPARAM(lp), cx); // unsigned act_col = g_cache.active_column_active_to_actual(column); if (column >= 0 && idx >= 0) { if (last_idx != (idx) || last_column != column) { if (!cfg_tooltips_clipped || is_item_clipped(idx, column)) { pfc::string8 src; g_cache.active_get_display_name(idx, column, src); pfc::string8 temp; titleformat_compiler::remove_color_marks(src, temp); temp.replace_char(9, 0x20); CreateToolTip(temp); } else { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } POINT a; a.x = cx + 3; a.y = (idx - scroll_item_offset) * item_height + get_header_height(); ClientToScreen(wnd_playlist, &a); tooltip.top = a.y; tooltip.bottom = a.y + item_height; tooltip.left = a.x; tooltip.right = a.x + get_column_width(column); } last_idx = idx; last_column = column; } else { DestroyWindow(g_tooltip); g_tooltip = 0; last_idx = -1; last_column = -1; } } if (drag_type && (wp & MK_LBUTTON) && !(GetKeyState(VK_SHIFT) & KF_UP) && !(GetKeyState(VK_CONTROL) & KF_UP)) { RECT rc; get_playlist_rect(&rc); static_api_ptr_t<playlist_manager> playlist_api; int total = playlist_api->activeplaylist_get_item_count(); int item_height = get_item_height(); int valid_idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), false); int idx = hittest_item_no_scroll(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), false); // (GET_Y_LPARAM(lp) - get_header_height()) / (item_height); int items_count = ((rc.bottom - rc.top) / item_height) + 1; if ((idx + scroll_item_offset) != dragitem || GET_Y_LPARAM(lp) < get_header_height()) //(idx + scroll_item_offset) < playlist_api->activeplaylist_get_item_count() { if (idx >= items_count - 1) { bool need_redrawing = false; int focus = playlist_api->activeplaylist_get_focus_item(); SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int old_offset = si.nPos; si.nPos += 3; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (old_offset != scroll_item_offset) need_redrawing = true; int t = scroll_item_offset + items_count - 2; //n=dragitem, if (t > total) t = total - 1; if (t != dragitem) { drawing_enabled = false; if (drag_type == 1) playlist_api->activeplaylist_move_selection((rc.bottom - rc.top) / item_height + scroll_item_offset - focus - 1); else if (drag_type == 2) { set_sel_range(dragstartitem, t, false); playlist_api->activeplaylist_set_focus_item(t); } dragitem = t; drawing_enabled = true; need_redrawing = true; } if (need_redrawing) RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } else if (idx < 0 || GET_Y_LPARAM(lp) < get_header_height() || GET_Y_LPARAM(lp) < 0) { int focus = playlist_api->activeplaylist_get_focus_item(); bool need_redrawing = false; SCROLLINFO si; memset(&si, 0, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_POS; GetScrollInfo(wnd_playlist, SB_VERT, &si); int old_offset = si.nPos; si.nPos -= 3; scroll_item_offset = SetScrollInfo(wnd_playlist, SB_VERT, &si, true); if (old_offset != scroll_item_offset) need_redrawing = true; if (dragitem != scroll_item_offset) { drawing_enabled = false; if (drag_type == 1) playlist_api->activeplaylist_move_selection(scroll_item_offset - focus); else if (drag_type == 2) { set_sel_range(dragstartitem, scroll_item_offset, false); playlist_api->activeplaylist_set_focus_item(scroll_item_offset); RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } dragitem = scroll_item_offset; drawing_enabled = true; need_redrawing = true; } if (need_redrawing) RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } else { int focus = playlist_api->activeplaylist_get_focus_item(); if (drag_type == 1) playlist_api->activeplaylist_move_selection(idx + scroll_item_offset - focus); else if (drag_type == 2) { if (valid_idx >= 0) { drawing_enabled = false; set_sel_range(dragstartitem, valid_idx, false); playlist_api->activeplaylist_set_focus_item(valid_idx); drawing_enabled = true; RedrawWindow(wnd_playlist, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW); } } dragitem = valid_idx; dragged = true; } } } else if (!(wp & MK_LBUTTON)) drag_type = 0; } break; case WM_LBUTTONDBLCLK: { int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); if (idx >= 0) { //#ifdef INLINE_EDIT exit_inline_edit(); m_no_next_edit = true; //#endif //if (!is_visible(idx)) SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0),0); #if 0 // DEATH's code case WM_LBUTTONDBLCLK: { int idx = item_from_point((short)HIWORD(lp)); if (idx >= 0 && idx<(int)m_api->activeplaylist_get_item_count()) { m_api->activeplaylist_set_focus_item(idx); static_api_ptr_t<play_control>()->play_start(play_control::TRACK_COMMAND_SETTRACK); } } return 0; #endif static_api_ptr_t<playlist_manager> playlist_api; //unsigned active = playlist_api->get_active_playlist(); // playlist_api->set_playing_playlist(active); //playlist_api->playlist_set_playback_cursor(active, idx); //playlist_api->queue_flush(); unsigned focus = playlist_api->activeplaylist_get_focus_item(); playlist_api->activeplaylist_execute_default_action(focus); } else if (cfg_playlist_double.get_value().m_command != pfc::guid_null) { mainmenu_commands::g_execute(cfg_playlist_double.get_value().m_command); } dragged = true; } break; case WM_RBUTTONDOWN: { if (wnd_playlist) SetFocus(wnd_playlist); g_dragging1 = true; drag_start.x = GET_X_LPARAM(lp); drag_start.y = GET_Y_LPARAM(lp); static_api_ptr_t<playlist_manager> playlist_api; // int item_height = get_item_height(); // int idx = ((GET_Y_LPARAM(lp) - get_header_height()) / item_height) + scroll_item_offset; int idx = hittest_item(GET_X_LPARAM(lp), GET_Y_LPARAM(lp), true); if (idx != -1 && !is_visible(idx)) SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); if (idx >= 0 /*&& idx < playlist_api->activeplaylist_get_item_count() && (GET_X_LPARAM(lp) < g_playlist_entries.get_total_width_actual())*/) { if (!playlist_api->activeplaylist_is_item_selected(idx) && !(GetKeyState(VK_CONTROL) & KF_UP)) { set_sel_single(idx, false, false, true); } playlist_api->activeplaylist_set_focus_item(idx); } } break; case WM_MOUSEWHEEL: {//GET_WHEEL_DELTA_WPARAM exit_inline_edit(); if (1 || (wp & MK_CONTROL)) { LONG_PTR style = GetWindowLongPtr(wnd_playlist, GWL_STYLE); if (!(style & WS_VSCROLL) || ((wp & MK_CONTROL) && (style & WS_HSCROLL))) { if ((style & WS_HSCROLL)) { SCROLLINFO si; memset(&si, 0, sizeof(SCROLLINFO)); si.fMask = SIF_PAGE; si.cbSize = sizeof(SCROLLINFO); GetScrollInfo(wnd, SB_HORZ, &si); int new_pos = horizontal_offset; int old_pos = horizontal_offset; unsigned scroll_lines = GetNumScrollLines(); int zDelta = short(HIWORD(wp)); if (scroll_lines == -1) { scroll_lines = si.nPage > 1 ? si.nPage - 1 : 1; } else scroll_lines *= 3; int delta = MulDiv(zDelta, scroll_lines, 120); if (!si.nPage) si.nPage++; if (delta < 0 && delta*-1 > si.nPage) { delta = si.nPage*-1; if (delta >1) delta--; } else if (delta > 0 && delta > si.nPage) { delta = si.nPage; if (delta >1) delta--; } scroll(scroll_horizontally, scroll_position_delta, -delta); } return 1; } } SCROLLINFO si; memset(&si, 0, sizeof(SCROLLINFO)); si.fMask = SIF_PAGE; si.cbSize = sizeof(SCROLLINFO); GetScrollInfo(wnd, SB_VERT, &si); int new_pos = scroll_item_offset; int old_pos = scroll_item_offset; unsigned scroll_lines = GetNumScrollLines(); int zDelta = short(HIWORD(wp)); if (scroll_lines == -1) { scroll_lines = si.nPage > 1 ? si.nPage - 1 : 1; } int delta = MulDiv(zDelta, scroll_lines, 120); if (!si.nPage) si.nPage++; if (delta < 0 && delta*-1 > si.nPage) { delta = si.nPage*-1; if (delta >1) delta--; } else if (delta > 0 && delta > si.nPage) { delta = si.nPage; if (delta >1) delta--; } scroll(scroll_vertically, scroll_position_delta, -delta); } return 1; case WM_VSCROLL: { exit_inline_edit(); scroll(scroll_vertically, scroll_sb, LOWORD(wp)); } return 0; case WM_HSCROLL: { exit_inline_edit(); scroll(scroll_horizontally, scroll_sb, LOWORD(wp)); } return 0; case WM_MENUSELECT: { if (HIWORD(wp) & MF_POPUP) { m_status_override.release(); } else { if (g_main_menu_a.is_valid() || g_main_menu_b.is_valid()) { unsigned id = LOWORD(wp); bool set = false; pfc::string8 desc; if (g_main_menu_a.is_valid() && id < MENU_B_BASE) { set = g_main_menu_a->get_description(id - MENU_A_BASE, desc); } else if (g_main_menu_b.is_valid()) { contextmenu_node * node = g_main_menu_b->find_by_id(id - MENU_B_BASE); if (node) set = node->get_description(desc); } service_ptr_t<ui_status_text_override> p_status_override; if (set) { get_host()->override_status_text_create(p_status_override); if (p_status_override.is_valid()) { p_status_override->override_text(desc); } } m_status_override = p_status_override; } } } break; case WM_CONTEXTMENU: { uie::window_ptr p_this_temp = this; if ((HWND)wp == wnd_header) { POINT pt = { (short)LOWORD(lp), (short)HIWORD(lp) }; POINT temp; temp.x = pt.x; temp.y = pt.y; ScreenToClient(wnd_header, &temp); HDHITTESTINFO hittest; hittest.pt.x = temp.x; hittest.pt.y = temp.y; SendMessage(wnd_header, HDM_HITTEST, 0, (LPARAM)&hittest); enum { IDM_ASC = 1, IDM_DES = 2, IDM_SEL_ASC, IDM_SEL_DES, IDM_AUTOSIZE, IDM_PREFS, IDM_EDIT_COLUMN, IDM_CUSTOM_BASE }; HMENU menu = CreatePopupMenu(); HMENU selection_menu = CreatePopupMenu(); if (!(hittest.flags & HHT_NOWHERE)) { uAppendMenu(menu, (MF_STRING), IDM_ASC, "&Sort ascending"); uAppendMenu(menu, (MF_STRING), IDM_DES, "Sort &descending"); uAppendMenu(selection_menu, (MF_STRING), IDM_SEL_ASC, "Sort a&scending"); uAppendMenu(selection_menu, (MF_STRING), IDM_SEL_DES, "Sort d&escending"); uAppendMenu(menu, MF_STRING | MF_POPUP, (UINT)selection_menu, "Se&lection"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); uAppendMenu(menu, (MF_STRING), IDM_EDIT_COLUMN, "&Edit this column"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); uAppendMenu(menu, (MF_STRING | (cfg_nohscroll ? MF_CHECKED : MF_UNCHECKED)), IDM_AUTOSIZE, "&Auto-sizing columns"); uAppendMenu(menu, (MF_STRING), IDM_PREFS, "&Preferences"); uAppendMenu(menu, (MF_SEPARATOR), 0, ""); pfc::string8 playlist_name; static_api_ptr_t<playlist_manager> playlist_api; playlist_api->activeplaylist_get_name(playlist_name); pfc::string8_fast_aggressive filter, name; int s, e = columns.get_count(); for (s = 0; s<e; s++) { bool add = false; switch (columns[s]->filter_type) { case FILTER_NONE: { add = true; break; } case FILTER_SHOW: { if (wildcard_helper::test(playlist_name, columns[s]->filter, true)) { add = true; /* g_columns.get_string(s, name, STRING_NAME); uAppendMenu(menu,MF_STRING|MF_CHECKED,IDM_CUSTOM_BASE+s,name);*/ } } break; case FILTER_HIDE: { if (!wildcard_helper::test(playlist_name, columns[s]->filter, true)) { add = true; /* g_columns.get_string(s, name, STRING_NAME); uAppendMenu(menu,MF_STRING|MF_CHECKED,IDM_CUSTOM_BASE+s,name);*/ } } break; } if (add) { uAppendMenu(menu, MF_STRING | (columns[s]->show ? MF_CHECKED : MF_UNCHECKED), IDM_CUSTOM_BASE + s, columns[s]->name); } } } else { uAppendMenu(menu, (MF_STRING | (cfg_nohscroll ? MF_CHECKED : MF_UNCHECKED)), IDM_AUTOSIZE, "&Auto-sizing columns"); uAppendMenu(menu, (MF_STRING), IDM_PREFS, "&Preferences"); } menu_helpers::win32_auto_mnemonics(menu); int cmd = TrackPopupMenu(menu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, wnd, 0); DestroyMenu(menu); if (cmd == IDM_ASC) { g_set_sort(hittest.iItem, false); } else if (cmd == IDM_DES) { g_set_sort(hittest.iItem, true); } else if (cmd == IDM_SEL_ASC) { g_set_sort(hittest.iItem, false, true); } else if (cmd == IDM_SEL_DES) { g_set_sort(hittest.iItem, true, true); } else if (cmd == IDM_EDIT_COLUMN) { g_set_tab("Columns"); cfg_cur_prefs_col = g_cache.active_column_active_to_actual(hittest.iItem); //get_idx static_api_ptr_t<ui_control>()->show_preferences(columns::config_get_playlist_view_guid()); } else if (cmd == IDM_AUTOSIZE) { cfg_nohscroll = cfg_nohscroll == 0; update_all_windows(); pvt::ng_playlist_view_t::g_on_autosize_change(); } else if (cmd == IDM_PREFS) { static_api_ptr_t<ui_control>()->show_preferences(columns::config_get_main_guid()); } else if (cmd >= IDM_CUSTOM_BASE) { if (t_size(cmd - IDM_CUSTOM_BASE) < columns.get_count()) { columns[cmd - IDM_CUSTOM_BASE]->show = !columns[cmd - IDM_CUSTOM_BASE]->show; //g_columns //if (!cfg_nohscroll) g_save_columns(); //g_cache.flush_all(); g_reset_columns(); update_all_windows(); pvt::ng_playlist_view_t::g_on_columns_change(); } } return 0; } else if ((HWND)wp == wnd) { //DWORD mp = GetMessagePos(); POINT px, pt = { GET_X_LPARAM(lp), GET_Y_LPARAM(lp) }; static_api_ptr_t<playlist_manager> playlist_api; if (playlist_api->activeplaylist_get_selection_count(1) > 0 && 1) { if (pt.x == -1 && pt.y == -1) { int focus = playlist_api->activeplaylist_get_focus_item(); unsigned last = get_last_viewable_item(); if (focus == -1 || focus < scroll_item_offset || focus > last) { px.x = 0; px.y = 0; } else { RECT rc; get_playlist_rect(&rc); px.x = 0; unsigned item_height = get_item_height(); px.y = (focus - scroll_item_offset)*(item_height)+item_height / 2 + rc.top; } pt = px; MapWindowPoints(wnd, HWND_DESKTOP, &pt, 1); } else { px = pt; ScreenToClient(wnd, &px); //int idx = hittest_item(px.x, px.y); //if (!is_visible(idx)) // SendMessage(wnd_playlist, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0),0); } // int idx = hittest_item(px.x, px.y); enum { ID_PLAY = 1, ID_CUT, ID_COPY, ID_PASTE, ID_SELECTION, ID_CUSTOM_BASE = 0x8000 }; HMENU menu = CreatePopupMenu();//LoadMenu(core_api::get_my_instance(),MAKEINTRESOURCE(IDR_TREEPOPUP)); service_ptr_t<mainmenu_manager> p_manager_selection; service_ptr_t<contextmenu_manager> p_manager_context; p_manager_selection = standard_api_create_t<mainmenu_manager>(); contextmenu_manager::g_create(p_manager_context); if (p_manager_selection.is_valid()) { p_manager_selection->instantiate(mainmenu_groups::edit_part2_selection); p_manager_selection->generate_menu_win32(menu, ID_SELECTION, ID_CUSTOM_BASE - ID_SELECTION, standard_config_objects::query_show_keyboard_shortcuts_in_menus() ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); if (GetMenuItemCount(menu) > 0) uAppendMenu(menu, MF_SEPARATOR, 0, ""); } AppendMenu(menu, MF_STRING, ID_CUT, L"Cut"); AppendMenu(menu, MF_STRING, ID_COPY, L"Copy"); if (playlist_utils::check_clipboard()) AppendMenu(menu, MF_STRING, ID_PASTE, L"Paste"); AppendMenu(menu, MF_SEPARATOR, 0, NULL); if (p_manager_context.is_valid()) { const keyboard_shortcut_manager::shortcut_type shortcuts[] = { keyboard_shortcut_manager::TYPE_CONTEXT_PLAYLIST, keyboard_shortcut_manager::TYPE_CONTEXT }; p_manager_context->set_shortcut_preference(shortcuts, tabsize(shortcuts)); p_manager_context->init_context_playlist(standard_config_objects::query_show_keyboard_shortcuts_in_menus() ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); p_manager_context->win32_build_menu(menu, ID_CUSTOM_BASE, -1); } menu_helpers::win32_auto_mnemonics(menu); MENU_A_BASE = ID_SELECTION; MENU_B_BASE = ID_CUSTOM_BASE; g_main_menu_a = p_manager_selection; g_main_menu_b = p_manager_context; int cmd = TrackPopupMenu(menu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, wnd, 0); if (m_status_override.is_valid()) { m_status_override.release(); } DestroyMenu(menu); if (cmd) { if (cmd == ID_CUT) { playlist_utils::cut(); } else if (cmd == ID_COPY) { playlist_utils::copy(); } else if (cmd == ID_PASTE) { playlist_utils::paste(wnd); } else if (cmd >= ID_SELECTION && cmd<ID_CUSTOM_BASE) { if (p_manager_selection.is_valid()) { p_manager_selection->execute_command(cmd - ID_SELECTION); } } else if (cmd >= ID_CUSTOM_BASE) { if (p_manager_context.is_valid()) { p_manager_context->execute_by_id(cmd - ID_CUSTOM_BASE); } } } g_main_menu_a.release(); g_main_menu_b.release(); } // contextmenu_manager::win32_run_menu_context_playlist(wnd, 0, config_object::g_get_data_bool_simple(standard_config_objects::bool_show_keyboard_shortcuts_in_menus, true) ? contextmenu_manager::FLAG_SHOW_SHORTCUTS : 0); } } return 0; //#ifdef INLINE_EDIT case WM_PARENTNOTIFY: { if (wp == WM_DESTROY) { if (m_wnd_edit && (HWND)lp == m_wnd_edit) m_wnd_edit = 0; } } break; case MSG_KILL_INLINE_EDIT: exit_inline_edit(); return 0; #if 1 case WM_COMMAND: switch (wp) { case (EN_CHANGE << 16) | 667: { m_edit_changed = true; } break; } break; #endif case WM_TIMER: { if (wp == EDIT_TIMER_ID) { create_inline_edit_v2(m_edit_index, m_edit_column); if (m_edit_timer) { KillTimer(wnd_playlist, EDIT_TIMER_ID); m_edit_timer = false; } return 0; } } break; //#endif case WM_NOTIFY: switch (((LPNMHDR)lp)->idFrom) { case ID_PLAYLIST_TOOLTIP: switch (((LPNMHDR)lp)->code) { case TTN_SHOW: RECT rc, rc_tt; rc = tooltip; GetWindowRect(g_tooltip, &rc_tt); int offset = MulDiv(get_item_height() - rc_tt.bottom + rc_tt.top, 1, 2); rc.top += offset; SetWindowPos(g_tooltip, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); return TRUE; } break; case 5001: switch (((LPNMHDR)lp)->code) { case HDN_BEGINTRACKA: case HDN_BEGINTRACKW: { return (cfg_nohscroll ? TRUE : FALSE); } case HDN_ENDDRAG: { if (((LPNMHEADERA)lp)->iButton == 0) { if (((LPNMHEADERA)lp)->pitem && (((LPNMHEADERA)lp)->pitem->mask & HDI_ORDER)) { int from = ((LPNMHEADERA)lp)->iItem; int to = ((LPNMHEADERA)lp)->pitem->iOrder; if (to >= 0 && from != to) { int act_from = g_cache.active_column_active_to_actual(from), act_to = g_cache.active_column_active_to_actual(to); columns.move(act_from, act_to); //if (!cfg_nohscroll) g_save_columns(); g_reset_columns(); update_all_windows(); pvt::ng_playlist_view_t::g_on_columns_change(); } } else { } } return (TRUE); } case HDN_DIVIDERDBLCLICK: if (!cfg_nohscroll) { static_api_ptr_t<playlist_manager> playlist_api; HDC hdc; hdc = GetDC(wnd_playlist); int size; pfc::string8 text; SelectObject(hdc, g_font); int w = 0, n, t = playlist_api->activeplaylist_get_item_count(); for (n = 0; n<t; n++) { // playlist_api->format_title(n, text, g_playlist_entries.get_display_spec(((LPNMHEADER)lp)->iItem), NULL); g_cache.active_get_display_name(n, ((LPNMHEADER)lp)->iItem, text); size = ui_helpers::get_text_width_color(hdc, text, text.length()); if (size > w) w = size; } // g_playlist_entries.get_column(((LPNMHEADER)lp)->iItem)->_set_width(w+5); columns[g_cache.active_column_active_to_actual(((LPNMHEADER)lp)->iItem)]->width = w + 15; ReleaseDC(wnd_playlist, hdc); update_all_windows(); g_save_columns(); pvt::ng_playlist_view_t::g_on_column_widths_change(); } return 0; case HDN_ITEMCLICK: { bool des = false; static_api_ptr_t<playlist_manager> playlist_api; unsigned col; bool descending; bool sorted = g_cache.active_get_playlist_sort(col, &descending); if (sorted && col == ((LPNMHEADER)lp)->iItem) des = !descending; g_set_sort(((LPNMHEADER)lp)->iItem, des /*, playlist_api->activeplaylist_get_selection_count(1) && cfg_sortsel != 0*/); } break; case HDN_ITEMCHANGED: { if (!cfg_nohscroll) { if (((LPNMHEADER)lp)->pitem->mask & HDI_WIDTH) columns[g_cache.active_column_active_to_actual(((LPNMHEADER)lp)->iItem)]->width = ((LPNMHEADER)lp)->pitem->cxy; update_all_windows(wnd_header); g_save_columns(); pvt::ng_playlist_view_t::g_on_column_widths_change(); } } break; } break; } } return DefWindowProc(wnd, msg, wp, lp); }
void EditorBase::DisplayContextMenu(const wxPoint& position, ModuleType type) { bool noeditor = (type != mtEditorManager); // noeditor: // True if context menu belongs to open files tree; // False if belongs to cbEditor // inform the editors we 're just about to create a context menu if (!OnBeforeBuildContextMenu(position, type)) return; wxMenu* popup = new wxMenu; if (!noeditor && wxGetKeyState(WXK_CONTROL)) { cbStyledTextCtrl* control = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor()->GetControl(); wxString text = control->GetSelectedText(); if (text.IsEmpty()) { const int pos = control->GetCurrentPos(); text = control->GetTextRange(control->WordStartPosition(pos, true), control->WordEndPosition(pos, true)); } if (wxMinimumVersion<2,6,1>::eval && !text.IsEmpty()) { popup->Append(idGoogle, _("Search the Internet for \"") + text + _T("\"")); popup->Append(idMsdn, _("Search MSDN for \"") + text + _T("\"")); popup->Append(idStackOverflow, _("Search StackOverflow for \"") + text + _T("\"")); popup->Append(idCodeProject, _("Search CodeProject for \"") + text + _T("\"")); } lastWord = text; wxMenu* switchto = CreateContextSubMenu(idSwitchTo); if (switchto) { if (popup->GetMenuItemCount() > 0) popup->AppendSeparator(); popup->Append(idSwitchTo, _("Switch to"), switchto); } } else if (!noeditor && wxGetKeyState(WXK_ALT)) { // run a script } else { // Basic functions BasicAddToContextMenu(popup, type); // Extended functions, part 1 (virtual) AddToContextMenu(popup, type, false); // ask other editors / plugins if they need to add any entries in this menu... FileTreeData* ftd = new FileTreeData(nullptr, FileTreeData::ftdkUndefined); ftd->SetFolder(m_Filename); Manager::Get()->GetPluginManager()->AskPluginsForModuleMenu(type, popup, ftd); delete ftd; popup->AppendSeparator(); // Extended functions, part 2 (virtual) AddToContextMenu(popup, type, true); } // inform the editors we 're done creating a context menu (just about to show it) OnAfterBuildContextMenu(type); // display menu wxPoint clientpos; if (position==wxDefaultPosition) // "context menu" key { // obtain the caret point (on the screen) as we assume // that the user wants to work with the keyboard cbStyledTextCtrl* const control = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor()->GetControl(); clientpos = control->PointFromPosition(control->GetCurrentPos()); } else { clientpos = ScreenToClient(position); } m_pData->m_DisplayingPopupMenu = true; PopupMenu(popup, clientpos); delete popup; m_pData->m_DisplayingPopupMenu = false; // this code *must* be the last code executed by this function // because it *will* invalidate 'this' if (m_pData->m_CloseMe) Manager::Get()->GetEditorManager()->Close(this); }
// wke窗口的windows消息处理 LRESULT CDuiWkeView::WebViewWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if( !GetRresponse() ) { return 0; } // 对于键盘消息,如果此控件不是焦点控件,则退出 if( message >= WM_KEYFIRST && message <= WM_KEYLAST ) { //if( !IsFocusControl() ) return 0; } bool handled = true; switch (message) { case WM_COMMAND: ::SendMessage(m_hWnd, message, wParam, lParam); return 0; /* case WM_PAINT: if (m_pWebView) { PAINTSTRUCT ps = { 0 }; HDC hDcPaint = ::BeginPaint(hWnd, &ps); RECT rcClip; ::GetClipBox(hDcPaint,&rcClip); RECT rcClient; ::GetClientRect(hWnd, &rcClient); RECT rcInvalid; ::IntersectRect(&rcInvalid, &rcClip,&rcClient); m_pWebView->paint(hDcPaint,rcInvalid.left,rcInvalid.top, rcInvalid.right - rcInvalid.left, rcInvalid.bottom - rcInvalid.top, rcInvalid.left-rcClient.left, rcInvalid.top-rcClient.top,true); ::EndPaint(hWnd, &ps); } break; */ case WM_SIZE: if (m_pWebView) { m_pWebView->resize(LOWORD(lParam), HIWORD(lParam)); m_render.resize(LOWORD(lParam), HIWORD(lParam)); } break; case WM_KEYDOWN: { OnWmKeyDown(hWnd, message, wParam, lParam); } break; case WM_KEYUP: { unsigned int virtualKeyCode = wParam; unsigned int flags = 0; if (HIWORD(lParam) & KF_REPEAT) flags |= WKE_REPEAT; if (HIWORD(lParam) & KF_EXTENDED) flags |= WKE_EXTENDED; //flags = HIWORD(lParam); handled = m_pWebView->keyUp(virtualKeyCode, flags, false); m_render.render(m_pWebView); } break; case WM_CHAR: case WM_IME_CHAR: { unsigned int charCode = wParam; unsigned int flags = 0; if (HIWORD(lParam) & KF_REPEAT) flags |= WKE_REPEAT; if (HIWORD(lParam) & KF_EXTENDED) flags |= WKE_EXTENDED; //flags = HIWORD(lParam); handled = m_pWebView->keyPress(charCode, flags, false); m_render.render(m_pWebView); } break; case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONDBLCLK: case WM_MBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: case WM_MOUSEMOVE: { if (message == WM_LBUTTONDOWN || message == WM_MBUTTONDOWN || message == WM_RBUTTONDOWN) { SetFocus(hWnd); SetCapture(hWnd); } else if (message == WM_LBUTTONUP || message == WM_MBUTTONUP || message == WM_RBUTTONUP) { ReleaseCapture(); } int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); unsigned int flags = 0; if (wParam & MK_CONTROL) flags |= WKE_CONTROL; if (wParam & MK_SHIFT) flags |= WKE_SHIFT; if (wParam & MK_LBUTTON) flags |= WKE_LBUTTON; if (wParam & MK_MBUTTON) flags |= WKE_MBUTTON; if (wParam & MK_RBUTTON) flags |= WKE_RBUTTON; //flags = wParam; handled = m_pWebView->mouseEvent(message, x, y, flags); m_render.render(m_pWebView); } break; case WM_CONTEXTMENU: { POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); if (pt.x != -1 && pt.y != -1) ScreenToClient(hWnd, &pt); unsigned int flags = 0; if (wParam & MK_CONTROL) flags |= WKE_CONTROL; if (wParam & MK_SHIFT) flags |= WKE_SHIFT; if (wParam & MK_LBUTTON) flags |= WKE_LBUTTON; if (wParam & MK_MBUTTON) flags |= WKE_MBUTTON; if (wParam & MK_RBUTTON) flags |= WKE_RBUTTON; handled = m_pWebView->contextMenuEvent(pt.x, pt.y, flags); m_render.render(m_pWebView); } break; case WM_MOUSEWHEEL: { POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); ScreenToClient(hWnd, &pt); int delta = GET_WHEEL_DELTA_WPARAM(wParam); unsigned int flags = 0; if (wParam & MK_CONTROL) flags |= WKE_CONTROL; if (wParam & MK_SHIFT) flags |= WKE_SHIFT; if (wParam & MK_LBUTTON) flags |= WKE_LBUTTON; if (wParam & MK_MBUTTON) flags |= WKE_MBUTTON; if (wParam & MK_RBUTTON) flags |= WKE_RBUTTON; //flags = wParam; handled = m_pWebView->mouseWheel(pt.x, pt.y, delta, flags); m_render.render(m_pWebView); } break; case WM_SETFOCUS: m_pWebView->focus(); m_render.render(m_pWebView); // 设置对话框的焦点控件为此控件 SetCurrentFocusControl(TRUE); break; case WM_KILLFOCUS: m_pWebView->unfocus(); m_render.render(m_pWebView); // 清除对话框的焦点控件 //SetCurrentFocusControl(FALSE); break; case WM_TIMER: m_render.render(m_pWebView); break; case WM_IME_STARTCOMPOSITION: { wkeRect caret = m_pWebView->getCaret(); CANDIDATEFORM form; form.dwIndex = 0; form.dwStyle = CFS_EXCLUDE; form.ptCurrentPos.x = caret.x; form.ptCurrentPos.y = caret.y + caret.h; form.rcArea.top = caret.y; form.rcArea.bottom = caret.y + caret.h; form.rcArea.left = caret.x; form.rcArea.right = caret.x + caret.w; HIMC hIMC = ImmGetContext(hWnd); ImmSetCandidateWindow(hIMC, &form); ImmReleaseContext(hWnd, hIMC); } break; default: handled = false; break; } if (!handled) return DefWindowProc(hWnd, message, wParam, lParam); return 0; }
INT_PTR CALLBACK DlgProcToolBar(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HTREEITEM hti; switch (uMsg) { case WM_INITDIALOG: hToolBarTree = GetDlgItem(hwndDlg, IDC_TOOLBARTREE); { LONG_PTR style = GetWindowLongPtr(hToolBarTree, GWL_STYLE); style ^= TVS_CHECKBOXES; SetWindowLongPtr(hToolBarTree, GWL_STYLE, style); style |= TVS_CHECKBOXES; style |= TVS_NOHSCROLL; SetWindowLongPtr(hToolBarTree, GWL_STYLE, style); } { mir_cslock lck(ToolBarCS); BuildMenuObjectsTree(hToolBarTree); } Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_SETRANGE, 0, MAKELONG(10, 0)); SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_SETPOS, 0, MAKELONG(PluginConfig.g_iButtonsBarGap, 0)); TranslateDialogDefault(hwndDlg); bOptionsInit = FALSE; break; case WM_LBUTTONUP: if (drag) { TreeView_SetInsertMark(hToolBarTree, NULL, 0); drag = 0; ReleaseCapture(); TVHITTESTINFO hti; hti.pt.x = (short)LOWORD(lParam); hti.pt.y = (short)HIWORD(lParam); ClientToScreen(hwndDlg, &hti.pt); ScreenToClient(hToolBarTree, &hti.pt); hti.pt.y -= TreeView_GetItemHeight(hToolBarTree) / 2; TreeView_HitTest(hToolBarTree, &hti); if (hDragItem == hti.hItem) break; if (hti.flags & TVHT_ABOVE) hti.hItem = TVI_FIRST; TVITEM tvi; tvi.mask = TVIF_HANDLE | TVIF_PARAM; tvi.hItem = (HTREEITEM)hDragItem; TreeView_GetItem(hToolBarTree, &tvi); if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT) || (hti.hItem == TVI_FIRST)) { TVINSERTSTRUCT tvis; TCHAR strbuf[128]; tvis.item.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE; tvis.item.stateMask = 0xFFFFFFFF; tvis.item.pszText = strbuf; tvis.item.cchTextMax = sizeof(strbuf); tvis.item.hItem = (HTREEITEM)hDragItem; TreeView_GetItem(hToolBarTree, &tvis.item); TreeView_DeleteItem(hToolBarTree, hDragItem); tvis.hParent = NULL; tvis.hInsertAfter = hti.hItem; TreeView_SelectItem(hToolBarTree, TreeView_InsertItem(hToolBarTree, &tvis)); SendMessage((GetParent(hwndDlg)), PSM_CHANGED, 0, 0); } } break; case WM_MOUSEMOVE: if (drag) { TVHITTESTINFO hti; hti.pt.x = (short)LOWORD(lParam); hti.pt.y = (short)HIWORD(lParam); ClientToScreen(hwndDlg, &hti.pt); ScreenToClient(hToolBarTree, &hti.pt); TreeView_HitTest(hToolBarTree, &hti); if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT)) { HTREEITEM it = hti.hItem; hti.pt.y -= TreeView_GetItemHeight(hToolBarTree) / 2; TreeView_HitTest(hToolBarTree, &hti); if (!(hti.flags & TVHT_ABOVE)) TreeView_SetInsertMark(hToolBarTree, hti.hItem, 1); else TreeView_SetInsertMark(hToolBarTree, it, 0); } else { if (hti.flags & TVHT_ABOVE) SendMessage(hToolBarTree, WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0); if (hti.flags & TVHT_BELOW) SendMessage(hToolBarTree, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); TreeView_SetInsertMark(hToolBarTree, NULL, 0); } } break; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED && GetFocus() == (HWND)lParam && (HWND)lParam != hToolBarTree) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); if ((HIWORD(wParam) == EN_CHANGE) && ((HWND)lParam == GetFocus())) if (!bOptionsInit) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); switch (LOWORD(wParam)) { case IDC_BBRESET: CallService(MS_DB_MODULE_DELETE, NULL, LPARAM("TabSRMM_Toolbar")); CB_HardReInit(); BuildMenuObjectsTree(hToolBarTree); break; case IDC_SEPARATOR: hti = TreeView_GetSelection(hToolBarTree); if (!hti) hti = TVI_FIRST; CustomButtonData *cbd = new CustomButtonData(); cbd->bSeparator = cbd->bHidden = cbd->bIMButton = cbd->bLSided = true; cbd->dwButtonOrigID = ++dwSepCount; cbd->pszModuleName = "Tabsrmm_sep"; cbd->iButtonWidth = 22; cbd->opFlags = BBSF_NTBDESTRUCT; LButtonsList.insert(cbd); TVINSERTSTRUCT tvis; tvis.hParent = NULL; tvis.hInsertAfter = hti; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvis.item.pszText = TranslateT("<Separator>"); tvis.item.iImage = tvis.item.iSelectedImage = -1; tvis.item.lParam = (LPARAM)cbd; hti = TreeView_InsertItem(hToolBarTree, &tvis); TreeView_SetCheckState(hToolBarTree, hti, (cbd->bIMButton || cbd->bChatButton)); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: CB_ReInitCustomButtons(); dwSepCount = M.GetDword("TabSRMM_Toolbar", "SeparatorsCount", 0); return 1; case PSN_APPLY: hti = TreeView_GetSelection(hToolBarTree); if (hti) { TVITEM tvi; tvi.mask = TVIF_HANDLE | TVIF_PARAM; tvi.hItem = hti; TreeView_GetItem(hToolBarTree, &tvi); if (tvi.lParam) { CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { cbd->bIMButton = IsDlgButtonChecked(hwndDlg, IDC_IMCHECK) != 0; cbd->bChatButton = IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK) != 0; cbd->bCanBeHidden = IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN) != 0; } } } SaveTree(hToolBarTree); CB_ReInitCustomButtons(); PluginConfig.g_iButtonsBarGap = (BYTE)SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_GETPOS, 0, 0); if (PluginConfig.g_iButtonsBarGap != M.GetByte("ButtonsBarGap", 1)) M.BroadcastMessageAsync(WM_SIZE, 0, 0); db_set_b(0, SRMSGMOD_T, "ButtonsBarGap", PluginConfig.g_iButtonsBarGap); BuildMenuObjectsTree((HWND)hToolBarTree); Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); return 1; } break; case IDC_TOOLBARTREE: switch (((LPNMHDR)lParam)->code) { case TVN_BEGINDRAGA: case TVN_BEGINDRAGW: SetCapture(hwndDlg); drag = 1; hDragItem = ((LPNMTREEVIEW)lParam)->itemNew.hItem; TreeView_SelectItem(hToolBarTree, hDragItem); break; case TVN_SELCHANGINGA: case TVN_SELCHANGINGW: hti = TreeView_GetSelection(hToolBarTree); if (hti != NULL) { TCHAR strbuf[128]; TVITEM tvi; tvi.hItem = hti; tvi.pszText = strbuf; tvi.cchTextMax = sizeof(strbuf); tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(hToolBarTree, &tvi); if (tvi.lParam == 0 || !TreeView_GetCheckState(hToolBarTree, tvi.hItem) || !_tcscmp(tvi.pszText, MIDDLE_SEPARATOR)) break; CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { cbd->opFlags = (IsDlgButtonChecked(hwndDlg, IDC_IMCHECK)) ? BBSF_IMBUTTON : 0; cbd->opFlags |= (IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK)) ? BBSF_CHATBUTTON : 0; cbd->opFlags |= (IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN)) ? BBSF_CANBEHIDDEN : 0; cbd->bIMButton = (IsDlgButtonChecked(hwndDlg, IDC_IMCHECK) ? TRUE : FALSE); cbd->bChatButton = (IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK) ? TRUE : FALSE); cbd->bCanBeHidden = (IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN) ? TRUE : FALSE); } } break; case TVN_SELCHANGEDW: case TVN_SELCHANGEDA: hti = TreeView_GetSelection(hToolBarTree); if (hti != NULL) { TCHAR strbuf[128]; TVITEM tvi; tvi.pszText = strbuf; tvi.cchTextMax = sizeof(strbuf); tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_PARAM; tvi.hItem = hti; TreeView_GetItem(hToolBarTree, &tvi); if (!TreeView_GetCheckState(hToolBarTree, tvi.hItem) || !_tcscmp(tvi.pszText, MIDDLE_SEPARATOR)) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); break; } if (tvi.lParam == 0) break; CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, TRUE); CheckDlgButton(hwndDlg, IDC_IMCHECK, (cbd->bIMButton) ? 1 : 0); CheckDlgButton(hwndDlg, IDC_CHATCHECK, (cbd->bChatButton) ? 1 : 0); CheckDlgButton(hwndDlg, IDC_CANBEHIDDEN, (cbd->bCanBeHidden) ? 1 : 0); } } break; case NM_CLICK: TVHITTESTINFO hti = { 0 }; GetCursorPos(&hti.pt); ScreenToClient(hToolBarTree, &hti.pt); if (TreeView_HitTest(hToolBarTree, &hti)) { if (hti.flags&TVHT_ONITEMSTATEICON) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); if (TreeView_GetCheckState(hToolBarTree, hti.hItem)) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); CheckDlgButton(hwndDlg, IDC_IMCHECK, 1); } else { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, TRUE); } TreeView_SelectItem(hToolBarTree, hti.hItem); } } } } break; case WM_DESTROY: HIMAGELIST hIml = TreeView_GetImageList(GetDlgItem(hwndDlg, IDC_TOOLBARTREE), TVSIL_NORMAL); ImageList_Destroy(hIml); hIml = TreeView_GetImageList(GetDlgItem(hwndDlg, IDC_TOOLBARTREE), TVSIL_STATE); ImageList_Destroy(hIml); break; } return FALSE; }
void CResizablePage::ArrangeLayout() { // init some vars CRect wndrc; GetClientRect(&wndrc); Layout *pl; POSITION pos = m_plLayoutList.GetHeadPosition(); HDWP hdwp = BeginDeferWindowPos(m_plLayoutList.GetCount()); while (pos != NULL) { pl = (Layout*)m_plLayoutList.GetNext(pos); CRect objrc, newrc; CWnd* wnd = CWnd::FromHandle(pl->hwnd); // temporary solution wnd->GetWindowRect(&objrc); ScreenToClient(&objrc); // calculate new top-left corner newrc.left = pl->tl_margin.cx + wndrc.Width() * pl->tl_type.cx / 100; newrc.top = pl->tl_margin.cy + wndrc.Height() * pl->tl_type.cy / 100; // calculate new bottom-right corner newrc.right = pl->br_margin.cx + wndrc.Width() * pl->br_type.cx / 100; newrc.bottom = pl->br_margin.cy + wndrc.Height() * pl->br_type.cy / 100; if (!newrc.EqualRect(&objrc)) { BOOL add = TRUE; if (pl->adj_hscroll) { // needs repainting, due to horiz scrolling int diff = newrc.Width() - objrc.Width(); int max = wnd->GetScrollLimit(SB_HORZ); if (max > 0 && wnd->GetScrollPos(SB_HORZ) > max - diff) { wnd->MoveWindow(&newrc); wnd->Invalidate(); wnd->UpdateWindow(); add = FALSE; } } if (pl->need_refresh) { wnd->MoveWindow(&newrc); wnd->Invalidate(); wnd->UpdateWindow(); add = FALSE; } if (add) DeferWindowPos(hdwp, pl->hwnd, NULL, newrc.left, newrc.top, newrc.Width(), newrc.Height(), SWP_NOZORDER | SWP_NOACTIVATE); } } // go re-arrange child windows EndDeferWindowPos(hdwp); }
void TSAPI BB_InitDlgButtons(TWindowData *dat) { RECT rect; int i; int lwidth = 0, rwidth = 0; RECT rcSplitter; POINT ptSplitter; int splitterY; BYTE gap = DPISCALEX_S(PluginConfig.g_iButtonsBarGap); BOOL isThemed = TRUE; int cx = 0, cy = 0; int lcount = LButtonsList.getCount(); int rcount = RButtonsList.getCount(); HWND hdlg = dat->hwnd; if (dat == 0 || hdlg == 0) { return; } if (CSkin::m_skinEnabled && !SkinItems[ID_EXTBKBUTTONSNPRESSED].IGNORED && !SkinItems[ID_EXTBKBUTTONSPRESSED].IGNORED && !SkinItems[ID_EXTBKBUTTONSMOUSEOVER].IGNORED) { isThemed = FALSE; } GetWindowRect(GetDlgItem(hdlg, (dat->bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter); ptSplitter.x = 0; ptSplitter.y = rcSplitter.top; ScreenToClient(hdlg, &ptSplitter); GetClientRect(hdlg, &rect); splitterY = ptSplitter.y - DPISCALEY_S(1); HWND hwndBtn = NULL; for (i = 0; i < RButtonsList.getCount(); i++) { CustomButtonData *cbd = RButtonsList[i]; if (((dat->bType == SESSIONTYPE_IM && cbd->bIMButton) || (dat->bType == SESSIONTYPE_CHAT && cbd->bChatButton))) { if (!cbd->bHidden) rwidth += cbd->iButtonWidth + gap; if (!cbd->bHidden && !cbd->bCanBeHidden) dat->iButtonBarReallyNeeds += cbd->iButtonWidth + gap; if (!cbd->bSeparator && !GetDlgItem(hdlg, cbd->dwButtonCID)) { hwndBtn = CreateWindowEx(0, _T("MButtonClass"), _T(""), WS_CHILD | WS_VISIBLE | WS_TABSTOP, rect.right - rwidth + gap, splitterY, cbd->iButtonWidth, DPISCALEY_S(22), hdlg, (HMENU)cbd->dwButtonCID, g_hInst, NULL); CustomizeButton(hwndBtn); } if (!cbd->bSeparator && hwndBtn) { SendMessage(hwndBtn, BUTTONSETASFLATBTN, TRUE, 0); SendMessage(hwndBtn, BUTTONSETASTHEMEDBTN, isThemed != 0, 0); if (cbd->hIcon) SendMessage(hwndBtn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)Skin_GetIconByHandle(cbd->hIcon)); if (cbd->ptszTooltip) SendMessage(hwndBtn, BUTTONADDTOOLTIP, (WPARAM)TranslateTS(cbd->ptszTooltip), BATF_TCHAR); SendMessage(hwndBtn, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0); SendMessage(hwndBtn, BUTTONSETASTOOLBARBUTTON, TRUE, 0); if (hwndBtn && cbd->dwArrowCID) SendMessage(hwndBtn, BUTTONSETARROW, cbd->dwArrowCID, 0); if (hwndBtn && cbd->bPushButton) SendMessage(hwndBtn, BUTTONSETASPUSHBTN, TRUE, 0); } } else if (GetDlgItem(hdlg, cbd->dwButtonCID)) DestroyWindow(GetDlgItem(hdlg, cbd->dwButtonCID)); if (cbd->bDisabled) EnableWindow(hwndBtn, 0); if (cbd->bHidden) ShowWindow(hwndBtn, SW_HIDE); } hwndBtn = NULL; for (i = 0; i < LButtonsList.getCount(); i++) { CustomButtonData *cbd = LButtonsList[i]; if (((dat->bType == SESSIONTYPE_IM && cbd->bIMButton) || (dat->bType == SESSIONTYPE_CHAT && cbd->bChatButton))) { if (!cbd->bSeparator && !GetDlgItem(hdlg, cbd->dwButtonCID)) { hwndBtn = CreateWindowEx(0, _T("MButtonClass"), _T(""), WS_CHILD | WS_VISIBLE | WS_TABSTOP, 2 + lwidth, splitterY, cbd->iButtonWidth, DPISCALEY_S(22), hdlg, (HMENU)cbd->dwButtonCID, g_hInst, NULL); CustomizeButton(hwndBtn); } if (!cbd->bHidden) lwidth += cbd->iButtonWidth + gap; if (!cbd->bHidden && !cbd->bCanBeHidden) dat->iButtonBarReallyNeeds += cbd->iButtonWidth + gap; if (!cbd->bSeparator && hwndBtn) { SendMessage(hwndBtn, BUTTONSETASFLATBTN, TRUE, 0); SendMessage(hwndBtn, BUTTONSETASTHEMEDBTN, isThemed != 0, 0); if (cbd->hIcon) SendMessage(hwndBtn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)Skin_GetIconByHandle(cbd->hIcon)); if (cbd->ptszTooltip) SendMessage(hwndBtn, BUTTONADDTOOLTIP, (WPARAM)TranslateTS(cbd->ptszTooltip), BATF_TCHAR); SendMessage(hwndBtn, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0); SendMessage(hwndBtn, BUTTONSETASTOOLBARBUTTON, TRUE, 0); if (hwndBtn && cbd->dwArrowCID) SendMessage(hwndBtn, BUTTONSETARROW, cbd->dwArrowCID, 0); if (hwndBtn && cbd->bPushButton) SendMessage(hwndBtn, BUTTONSETASPUSHBTN, TRUE, 0); } } else if (GetDlgItem(hdlg, cbd->dwButtonCID)) DestroyWindow(GetDlgItem(hdlg, cbd->dwButtonCID)); if (cbd->bDisabled) EnableWindow(hwndBtn, 0); if (cbd->bHidden) ShowWindow(hwndBtn, SW_HIDE); } dat->bbLSideWidth = lwidth; dat->bbRSideWidth = rwidth; }
void CResizablePage::AddAnchor(HWND wnd, CSize tl_type, CSize br_type) { ASSERT(wnd != NULL && ::IsWindow(wnd)); ASSERT(::IsChild(*this, wnd)); ASSERT(tl_type != NOANCHOR); // get control's window class CString st; GetClassName(wnd, st.GetBufferSetLength(MAX_PATH), MAX_PATH); st.ReleaseBuffer(); st.MakeUpper(); // add the style 'clipsiblings' to a GroupBox // to avoid unnecessary repainting of controls inside if (st == "BUTTON") { DWORD style = GetWindowLong(wnd, GWL_STYLE); if (style & BS_GROUPBOX) SetWindowLong(wnd, GWL_STYLE, style | WS_CLIPSIBLINGS); } // wnd classes that don't redraw client area correctly // when the hor scroll pos changes due to a resizing BOOL hscroll = FALSE; if (st == "LISTBOX") hscroll = TRUE; // wnd classes that need refresh when resized BOOL refresh = FALSE; if (st == "STATIC") { DWORD style = GetWindowLong(wnd, GWL_STYLE); switch (style & SS_TYPEMASK) { case SS_LEFT: case SS_CENTER: case SS_RIGHT: // word-wrapped text needs refresh refresh = TRUE; } // centered images or text need refresh if (style & SS_CENTERIMAGE) refresh = TRUE; // simple text never needs refresh if ((style & SS_TYPEMASK) == SS_SIMPLE) refresh = FALSE; } // get dialog's and control's rect CRect wndrc, objrc; GetClientRect(&wndrc); ::GetWindowRect(wnd, &objrc); ScreenToClient(&objrc); CSize tl_margin, br_margin; if (br_type == NOANCHOR) br_type = tl_type; // calculate margin for the top-left corner tl_margin.cx = objrc.left - wndrc.Width() * tl_type.cx / 100; tl_margin.cy = objrc.top - wndrc.Height() * tl_type.cy / 100; // calculate margin for the bottom-right corner br_margin.cx = objrc.right - wndrc.Width() * br_type.cx / 100; br_margin.cy = objrc.bottom - wndrc.Height() * br_type.cy / 100; // add to the list m_plLayoutList.AddTail(new Layout(wnd, tl_type, tl_margin, br_type, br_margin, hscroll, refresh)); }
void CNCaptureView::_SetScrollInfo(float newZoomScale, BOOL bUseCenterPoint) { if (m_pImage && !m_pImage->IsNull()) { BOOL bRet = FALSE; CRect rcClient; API_VERIFY(GetClientRect(&rcClient)); //save old ptLogical CPoint ptMouseDevice(0, 0); API_VERIFY(::GetCursorPos(&ptMouseDevice)); API_VERIFY(ScreenToClient(&ptMouseDevice)); if (!rcClient.PtInRect(ptMouseDevice) || bUseCenterPoint) { ptMouseDevice = rcClient.CenterPoint(); } CPoint ptOldLogical = ptMouseDevice; ClientToDoc(&ptOldLogical); //ptOldPos.Offset(m_rcDrawTarget.TopLeft()); SetZoomScale(newZoomScale); //FTLTRACE(TEXT("Zoom=%f, image=[%d,%d], sizeAll=[%d,%d]\n"), // s_FixedZoomScales[m_iFixedZoomIndex], m_pImage->GetWidth(), m_pImage->GetHeight(), // (int)((float)m_pImage->GetWidth() * s_FixedZoomScales[m_iFixedZoomIndex]), // (int)((float)m_pImage->GetHeight() * s_FixedZoomScales[m_iFixedZoomIndex])); SetScrollSize(m_pImage->GetWidth(), m_pImage->GetHeight(), TRUE, true); CPoint ptNewClient = ptOldLogical; //ptNewPos.Offset(-m_rcDrawTarget.TopLeft()); DocToClient(&ptNewClient); CPoint ptNewOffset = ptNewClient; ptNewOffset.Offset(-ptMouseDevice); SetScrollOffset(ptNewOffset.x, ptNewOffset.y); /* if (!GetSelection().empty()) { CTextObject* pTextObject = dynamic_cast<CTextObject*>(GetSelection().front()); if (pTextObject) { //SIZEL newExtent = {0}; //newExtent.cy = (double)pTextObject->GetPosition().Height() * 2540 * newZoomScale * 96; //newExtent.cx = (double)pTextObject->GetPosition().Width() * 2540 * newZoomScale * 96; pTextObject->GetRichEditPanel()->SetZoom(m_sizeAll.cx, m_sizeLogAll.cx); //pTextObject->GetRichEditPanel()->SetExtent(&newExtent, TRUE); } } */ //FTLTRACE(TEXT("ptMouseDevice=[%d,%d], ptOldLogical=[%d,%d], ptNewClient=[%d,%d], ptNewOffset=[%d,%d]\n"), // ptMouseDevice.x, ptMouseDevice.y, ptOldLogical.x, ptOldLogical.y, ptNewClient.x, ptNewClient.y, // ptNewOffset.x, ptNewOffset.y); _UpdateMousePosInfo(ptMouseDevice); SetCurrentToolType(CalcCurrentToolType()); //DrawObjectList& SelectObjects = GetSelection(); //if (SelectObjects.size() == 1 ) //{ // CDrawObject* pDrawObj = SelectObjects.front(); // if (dotSelectRect == pDrawObj->GetDrawObjType()) // { // CRect rcDevice = pDrawObj->GetPosition(); // DocToClient(&rcDevice); // ScrollToView(rcDevice); // } //} } else //make scrollbar disappear { SetZoomScale(s_FixedZoomScales[s_NormalZoomIndex]); SetScrollSize(1, 1, FALSE, FALSE); } }
void CCoolDialogBar::DrawGripper(CDC & dc) { // no gripper if floating if ( m_dwStyle & CBRS_FLOATING ) return; // -==HACK==- // in order to calculate the client area properly after docking, // the client area must be recalculated twice (I have no idea why) m_pDockSite->RecalcLayout(); // -==END HACK==- CRect gripper; GetWindowRect( gripper ); ScreenToClient( gripper ); gripper.OffsetRect( -gripper.left, -gripper.top ); if ( m_dwStyle & CBRS_ORIENT_HORZ ) { // gripper at left m_rectGripper.top = gripper.top + 40; m_rectGripper.bottom = gripper.bottom; m_rectGripper.left = gripper.left; m_rectGripper.right = gripper.left + 20; // draw close box m_rectClose.left = gripper.left + 7; m_rectClose.right = m_rectClose.left + 12; m_rectClose.top = gripper.top + 10; m_rectClose.bottom = m_rectClose.top + 12; dc.DrawFrameControl(m_rectClose, DFC_CAPTION, DFCS_CAPTIONCLOSE); // draw docking toggle box m_rectUndock = m_rectClose; m_rectUndock.OffsetRect(0,13); dc.DrawFrameControl(m_rectUndock, DFC_CAPTION, DFCS_CAPTIONMAX); gripper.top += 38; gripper.bottom -= 10; gripper.left += 10; gripper.right = gripper.left+3; dc.Draw3dRect( gripper, m_clrBtnHilight, m_clrBtnShadow ); gripper.OffsetRect(4, 0); dc.Draw3dRect( gripper, m_clrBtnHilight, m_clrBtnShadow ); } else { // gripper at top m_rectGripper.top = gripper.top; m_rectGripper.bottom = gripper.top + 20; m_rectGripper.left = gripper.left; m_rectGripper.right = gripper.right - 40; // draw close box m_rectClose.right = gripper.right - 10; m_rectClose.left = m_rectClose.right - 11; m_rectClose.top = gripper.top + 7; m_rectClose.bottom = m_rectClose.top + 11; dc.DrawFrameControl(m_rectClose, DFC_CAPTION, DFCS_CAPTIONCLOSE); // draw docking toggle box m_rectUndock = m_rectClose; m_rectUndock.OffsetRect(-13,0); dc.DrawFrameControl(m_rectUndock, DFC_CAPTION, DFCS_CAPTIONMAX); gripper.right -= 38; gripper.left += 10; gripper.top += 10; gripper.bottom = gripper.top+3; dc.Draw3dRect( gripper, m_clrBtnHilight, m_clrBtnShadow ); gripper.OffsetRect(0, 4); dc.Draw3dRect( gripper, m_clrBtnHilight, m_clrBtnShadow ); } }
BOOL CDlgExpEditorDM::OnInitDialog() { // TODO: 在此添加额外的初始化 Json::Reader jR; if(!jR.parse(std::string(m_strExp), m_Jv)) {//解析失败 EndDialog(0); return TRUE; } Json::Value& jStr = m_Jv["ShowRootFlag"]; m_IsShowRoot = TRUE; std::string str = jStr.asString(); if(str.empty() || str == "false") { m_IsShowRoot = FALSE; } //20140526,lc,修改为左侧树不初始化,影响加载效率,因为后期设计中已无左侧树 m_IsInitTree = FALSE; m_strExp = m_Jv["OldExp"].asString().c_str(); CDlgExpEditor::OnInitDialog(); GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON4)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON5)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON6)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON13)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON14)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON15)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON16)->ShowWindow(SW_HIDE); GetDlgItem(IDC_BUTTON17)->ShowWindow(SW_HIDE); int d = 20; MoveItemUp(GetDlgItem(IDC_BUTTON7), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDC_BUTTON8), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDC_BUTTON9), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDC_BUTTON10), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDC_BUTTON11), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDC_BUTTON12), GetDlgItem(IDC_EDIT_EXP), d); MoveItemUp(GetDlgItem(IDOK), GetDlgItem(IDC_BUTTON7), d); int nD= MoveItemUp(GetDlgItem(IDCANCEL), GetDlgItem(IDC_BUTTON7), d); CRect rect; GetDlgItem(IDC_STATIC_TREE)->GetWindowRect(rect); rect.DeflateRect(0, 0, 0, nD); ScreenToClient(rect); GetDlgItem(IDC_STATIC_TREE)->MoveWindow(rect); GetWindowRect(rect); rect.DeflateRect(0, 0, 0, nD); MoveWindow(rect); if(true) {//隐藏树 CWnd& m_wndTreeLocation = *GetDlgItem(IDC_STATIC_TREE); m_wndGridTree.ShowWindow(SW_HIDE); m_wndTreeLocation.ShowWindow(SW_HIDE); CRect rect; m_wndTreeLocation.GetWindowRect(rect); int d = rect.Width() + 10; MoveItem(GetDlgItem(IDC_BUTTON7), LEFT, d); MoveItem(GetDlgItem(IDC_BUTTON8), LEFT, d); MoveItem(GetDlgItem(IDC_BUTTON9), LEFT, d); MoveItem(GetDlgItem(IDC_BUTTON10), LEFT, d); MoveItem(GetDlgItem(IDC_BUTTON11), LEFT, d); MoveItem(GetDlgItem(IDC_BUTTON12), LEFT, d); MoveItem(GetDlgItem(IDOK), LEFT, d); MoveItem(GetDlgItem(IDCANCEL), LEFT, d); MoveItem(GetDlgItem(IDC_EDIT_EXP), LEFT, d); GetWindowRect(rect); rect.DeflateRect(0, 0, d, 0); MoveWindow(rect); } return FALSE; }
void InputSystem::update() { #ifndef PLATFORM_WP8 m_keyboard->Poll(); if(!SUCCEEDED(m_keyboard->GetDeviceState(256, (LPVOID)&m_keyState))) { m_keyboard->Acquire(); } m_mouse->Poll(); if(!SUCCEEDED(m_mouse->GetDeviceState(sizeof(DIMOUSESTATE), &m_mouseState))) { m_mouse->Acquire(); } m_mouseMove.x = m_mouseState.lX; m_mouseMove.y = m_mouseState.lY; m_wheelMove = m_mouseState.lZ; POINT mousePoint; GetCursorPos(&mousePoint); ScreenToClient(m_windowHandle, &mousePoint); m_mousePosition.x = mousePoint.x; m_mousePosition.y = mousePoint.y; if(m_joystickValidity) { if(!SUCCEEDED(m_joystick->GetDeviceState(sizeof(DIJOYSTATE2), &m_joystickState))) { m_joystick->Acquire(); } m_joystickAxis.x = (m_joystickState.lX - 32767) / 32767; m_joystickAxis.y = (m_joystickState.lY - 32767) / 32767; } float currentTime = eagle.getTimer()->getPassedTimeSeconds(); for(int i = 0; i < 256; ++i) { if(isKeyPressed((KeyboardKey)i)) { m_keyHoldDuration[i] = 0; m_keyHoldStart[i] = currentTime; m_keyTapCount[i]++; m_keyTotalPressCount[i]++; addToKeySequence(i); } else if(isKeyDown((KeyboardKey)i)) { m_keyHoldDuration[i] = currentTime - m_keyHoldStart[i]; } else { m_keyHoldDuration[i] = 0; } } for(int i = 0; i < 4; ++i) { if(isMouseButtonPressed((MouseButton)i)) { m_buttonHoldDuration[i] = 0; m_buttonHoldStart[i] = currentTime; m_buttonTapCount[i]++; m_buttonTotalPressCount[i]++; } else if(isMouseButtonDown((MouseButton)i)) { m_buttonHoldDuration[i] = currentTime - m_buttonHoldStart[i]; } else { m_buttonHoldDuration[i] = 0; } } if(m_tapTimer.stopWatch(1)) { for(int i = 0; i < 256; ++i) { m_keyTapFrequency[i] = m_keyTapCount[i]; m_keyTapCount[i] = 0; } for(int i = 0; i < 4; ++i) { m_buttonTapFrequency[i] = m_buttonTapCount[i]; m_buttonTapCount[i] = 0; } m_tapTimer.reset(); } #else int currentTime = eagle.getTimer()->getPassedTimeSeconds(); for(int i = 0; i < INPUT_SUPPORTED_TOUCH_COUNT; ++i) { if(isMouseButtonPressed(i)) { m_touchHoldDuration[i] = 0; m_touchHoldStart[i] = currentTime; m_touchTapCount[i]++; m_touchTotalPressCount[i]++; } else if(isMouseButtonDown(i)) { m_touchHoldDuration[i] = currentTime - m_touchHoldStart[i]; } else { m_touchHoldDuration[i] = 0; m_touchMoveList[i].set(0, 0); } } if(m_tapTimer.stopWatch(1)) { for(int i = 0; i < 4; ++i) { m_touchTapFrequency[i] = m_touchTapCount[i]; m_touchTapCount[i] = 0; } m_tapTimer.reset(); } #endif }
static INT_PTR CALLBACK DefInpProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_INITDIALOG: { hIpsDlg = hDlg; hWhiteBGBrush = CreateSolidBrush(RGB(0xFF,0xFF,0xFF)); hPreview = PNGLoadBitmap(hIpsDlg, NULL, 304, 228, 2); SendDlgItemMessage(hIpsDlg, IDC_SCREENSHOT_H, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hPreview); LONG_PTR Style; Style = GetWindowLongPtr (GetDlgItem(hIpsDlg, IDC_TREE1), GWL_STYLE); Style |= TVS_CHECKBOXES; SetWindowLongPtr (GetDlgItem(hIpsDlg, IDC_TREE1), GWL_STYLE, Style); IpsManagerInit(); WndInMid(hDlg, hScrnWnd); SetFocus(hDlg); // Enable Esc=close break; } case WM_COMMAND: { int wID = LOWORD(wParam); int Notify = HIWORD(wParam); if (Notify == BN_CLICKED) { switch (wID) { case IDOK: { IpsOkay(); break; } case IDCANCEL: { SendMessage(hDlg, WM_CLOSE, 0, 0); return 0; } case IDC_IPSMAN_DESELECTALL: { for (int i = 0; i < nNumPatches; i++) { for (int j = 0; j < nNumPatches; j++) { _TreeView_SetCheckState(hIpsList, hPatchHandlesIndex[j], FALSE); } } break; } } } if (wID == IDC_CHOOSE_LIST && Notify == CBN_SELCHANGE) { nIpsSelectedLanguage = SendMessage(GetDlgItem(hIpsDlg, IDC_CHOOSE_LIST), CB_GETCURSEL, 0, 0); TreeView_DeleteAllItems(hIpsList); FillListBox(); RefreshPatch(); return 0; } break; } case WM_NOTIFY: { NMHDR* pNmHdr = (NMHDR*)lParam; if (LOWORD(wParam) == IDC_TREE1 && pNmHdr->code == TVN_SELCHANGED) { RefreshPatch(); return 1; } if (LOWORD(wParam) == IDC_TREE1 && pNmHdr->code == NM_DBLCLK) { // disable double-click node-expand SetWindowLongPtr(hIpsDlg, DWLP_MSGRESULT, 1); return 1; } if (LOWORD(wParam) == IDC_TREE1 && pNmHdr->code == NM_CLICK) { POINT cursorPos; GetCursorPos(&cursorPos); ScreenToClient(hIpsList, &cursorPos); TVHITTESTINFO thi; thi.pt = cursorPos; TreeView_HitTest(hIpsList, &thi); if (thi.flags == TVHT_ONITEMSTATEICON) { TreeView_SelectItem(hIpsList, thi.hItem); } return 1; } SetWindowLongPtr(hIpsDlg, DWLP_MSGRESULT, CDRF_DODEFAULT); return 1; } case WM_CTLCOLORSTATIC: { if ((HWND)lParam == GetDlgItem(hIpsDlg, IDC_TEXTCOMMENT)) { return (BOOL)hWhiteBGBrush; } break; } case WM_CLOSE: { IpsManagerExit(); break; } } return 0; }
void CBacnetProgram::Initial_List() { m_program_list.ShowWindow(SW_HIDE); m_program_list.DeleteAllItems(); while ( m_program_list.DeleteColumn (0)) ; m_program_list.ModifyStyle(0, LVS_SINGLESEL|LVS_REPORT|LVS_SHOWSELALWAYS); //m_program_list.SetExtendedStyle(m_program_list.GetExtendedStyle() |LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES); m_program_list.SetExtendedStyle(m_program_list.GetExtendedStyle() |LVS_EX_GRIDLINES&(~LVS_EX_FULLROWSELECT));//Not allow full row select. m_program_list.InsertColumn(0, _T("Program"), 80, ListCtrlEx::CheckBox, LVCFMT_LEFT, ListCtrlEx::SortByDigit); m_program_list.InsertColumn(1, _T("Full Label"), 150, ListCtrlEx::EditBox, LVCFMT_LEFT, ListCtrlEx::SortByString); m_program_list.InsertColumn(2, _T("Status"), 100, ListCtrlEx::ComboBox, LVCFMT_LEFT, ListCtrlEx::SortByString); m_program_list.InsertColumn(3, _T("Auto/Manual"), 100, ListCtrlEx::ComboBox, LVCFMT_LEFT, ListCtrlEx::SortByString); m_program_list.InsertColumn(4, _T("Size"), 80, ListCtrlEx::Normal, LVCFMT_LEFT, ListCtrlEx::SortByString); m_program_list.InsertColumn(5, _T("Run Status"), 100, ListCtrlEx::Normal, LVCFMT_LEFT, ListCtrlEx::SortByString); m_program_list.InsertColumn(6, _T("Label"), 100, ListCtrlEx::EditBox, LVCFMT_LEFT, ListCtrlEx::SortByString); m_pragram_dlg_hwnd = this->m_hWnd; //g_hwnd_now = m_pragram_dlg_hwnd; CRect list_rect,win_rect; m_program_list.GetWindowRect(list_rect); ScreenToClient(&list_rect); ::GetWindowRect(m_pragram_dlg_hwnd,win_rect); m_program_list.Set_My_WindowRect(win_rect); m_program_list.Set_My_ListRect(list_rect); m_program_list.DeleteAllItems(); for (int i=0;i<(int)m_Program_data.size();i++) { CString temp_item,temp_value,temp_cal,temp_filter,temp_status,temp_lable; CString temp_des; CString temp_units; if(i>=program_item_limit_count) break; temp_item.Format(_T("%d"),i+1); m_program_list.InsertItem(i,temp_item); m_program_list.SetCellEnabled(i,0,0); m_program_list.SetCellChecked(0,0,1);// default will set the first one checked if(ListCtrlEx::ComboBox == m_program_list.GetColumnType(PROGRAM_AUTO_MANUAL)) { ListCtrlEx::CStrList strlist; strlist.push_back(Auto_Manual[0]); strlist.push_back(Auto_Manual[1]); m_program_list.SetCellStringList(i, PROGRAM_AUTO_MANUAL, strlist); } if(ListCtrlEx::ComboBox == m_program_list.GetColumnType(PROGRAM_STATUS)) { ListCtrlEx::CStrList strlist; strlist.push_back(ProgramStatus[0]); strlist.push_back(ProgramStatus[1]); m_program_list.SetCellStringList(i, PROGRAM_STATUS, strlist); } for (int x=0;x<PROGRAM_COL_NUMBER;x++) { if((i%2)==0) m_program_list.SetItemBkColor(i,x,LIST_ITEM_DEFAULT_BKCOLOR); else m_program_list.SetItemBkColor(i,x,LIST_ITEM_DEFAULT_BKCOLOR_GRAY); } } m_program_list.InitListData(); m_program_list.SetCellChecked(0,0,1); m_program_list.ShowWindow(SW_SHOW); }
void CCheckerCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default SetFocus(); DWORD dwPos = GetMessagePos(); CPoint clickedPoint((int)(short)LOWORD(dwPos), (int)(short)HIWORD(dwPos)); ScreenToClient(&clickedPoint); { CRect cRect; GetWindowRect(&cRect); ScreenToClient(&cRect); UINT nY = UINT(((float)clickedPoint.y / (float(cRect.Height())/float(m_nBlocksPerColumn)))+.3); UINT nX = UINT(((float)clickedPoint.x / (float(cRect.Width())/float(m_nBlocksPerRow)))+.3); UINT nIndex = nY * m_nBlocksPerRow + nX + m_nyPos * m_nBlocksPerRow; if(nIndex < m_nNumberofBlocks && nX < m_nBlocksPerRow) { CString strNumber; // strNumber.Format("%d", nIndex + m_nStartIndex+1); strNumber = (m_crText.GetAt(nIndex + m_nStartIndex)); if (strNumber.GetLength()) { SetCapture(); CreateSafeTooltipRect(clickedPoint.x, clickedPoint.y, strNumber); GetParent()->PostMessage(9876,(WPARAM)(nIndex+m_nStartIndex+1), 0); CClientDC dc(this); CBrush brush; brush.CreateSolidBrush(GetSysColor(COLOR_INFOBK)); dc.Rectangle(tooltipRect); tooltipRect.left++; tooltipRect.top++; tooltipRect.bottom--; tooltipRect.right--; dc.FillRect(tooltipRect, &brush); CFont font; LOGFONT logFont; strcpy(logFont.lfFaceName, "Verdana"); logFont.lfHeight = -MulDiv(12, GetDeviceCaps(dc.m_hDC, LOGPIXELSY), 72); logFont.lfWidth = 0; logFont.lfEscapement = 0; logFont.lfItalic = FALSE; logFont.lfStrikeOut = FALSE; logFont.lfUnderline = FALSE; logFont.lfWeight = FW_BOLD; font.CreateFontIndirect(&logFont); dc.SelectObject(font); dc.SetTextColor(GetSysColor(COLOR_INFOTEXT)); dc.SetBkColor(GetSysColor(COLOR_INFOBK)); dc.DrawText(strNumber, tooltipRect, DT_VCENTER | DT_CENTER | DT_SINGLELINE); tooltipRect.left--; tooltipRect.top--; tooltipRect.bottom++; tooltipRect.right++; m_bShouldUpdated = TRUE; } } } CWnd::OnLButtonDown(nFlags, point); }
BOOL CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { DWORD ws; struct ParentWindowData *dat; dat = (struct ParentWindowData *) GetWindowLong(hwndDlg, GWL_USERDATA); if (!dat && msg!=WM_INITDIALOG) return FALSE; switch (msg) { case WM_INITDIALOG: { struct NewMessageWindowLParam *newData = (struct NewMessageWindowLParam *) lParam; dat = (struct ParentWindowData *) malloc(sizeof(struct ParentWindowData)); dat->foregroundWindow = GetForegroundWindow(); dat->hContact = newData->hContact; dat->nFlash = 0; dat->nFlashMax = DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_FLASHCOUNT, SRMSGDEFSET_FLASHCOUNT); dat->childrenCount = 0; dat->children = NULL; dat->hwnd = hwndDlg; dat->flags = g_dat->flags;// | SMF_SHOWTITLEBAR; dat->mouseLBDown = 0; dat->windowWasCascaded = 0; dat->hwndStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hwndDlg, NULL, g_hInst, NULL); { int statwidths[4]; RECT rc; SendMessage(dat->hwndStatus, SB_SETMINHEIGHT, GetSystemMetrics(SM_CYSMICON), 0); GetWindowRect(dat->hwndStatus, &rc); /* statwidths[0] = rc.right - rc.left - SB_CHAR_WIDTH - SB_TYPING_WIDTH - SB_SENDING_WIDTH; statwidths[1] = rc.right - rc.left - SB_TYPING_WIDTH - SB_SENDING_WIDTH; //rc.right - rc.left - SB_CHAR_WIDTH; statwidths[2] = rc.right - rc.left - SB_TYPING_WIDTH; //rc.right - rc.left - SB_CHAR_WIDTH; statwidths[3] = -1; SendMessage(dat->hwndStatus, SB_SETPARTS, 4, (LPARAM) statwidths); */ statwidths[0] = rc.right - rc.left - SB_CHAR_WIDTH - SB_TYPING_WIDTH; statwidths[1] = rc.right - rc.left - SB_TYPING_WIDTH; statwidths[2] = -1; SendMessage(dat->hwndStatus, SB_SETPARTS, 3, (LPARAM) statwidths); } dat->hwndTabs = GetDlgItem(hwndDlg, IDC_TABS); dat->hwndActive = NULL; SetWindowLong(hwndDlg, GWL_USERDATA, (LONG) dat); if (g_dat->hIconList != NULL) { TabCtrl_SetImageList(dat->hwndTabs, g_dat->hIconList); } WindowList_Add(g_dat->hParentWindowList, hwndDlg, 0); dat->tabCtrlDat = (struct TabCtrlData *) malloc(sizeof(struct TabCtrlData)); dat->tabCtrlDat->bDragging = FALSE; SetWindowLong(dat->hwndTabs, GWL_USERDATA, (LONG) dat->tabCtrlDat); OldTabCtrlProc = (WNDPROC) SetWindowLong(dat->hwndTabs, GWL_WNDPROC, (LONG) TabCtrlProc); ws = GetWindowLong(dat->hwndTabs, GWL_STYLE) & ~(TCS_BOTTOM); if (dat->flags & SMF_TABSATBOTTOM) { ws |= TCS_BOTTOM; } SetWindowLong(dat->hwndTabs, GWL_STYLE, ws); ws = GetWindowLong(hwndDlg, GWL_STYLE) & ~(WS_CAPTION); if (dat->flags & SMF_SHOWTITLEBAR) { ws |= WS_CAPTION; SetWindowLong(hwndDlg, GWL_STYLE, ws); } else { RECT rc; SetWindowLong(hwndDlg, GWL_STYLE, ws); GetWindowRect(hwndDlg, &rc); SetWindowPos(hwndDlg, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING); } ws = GetWindowLong(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED; ws |= dat->flags & SMF_USETRANSPARENCY ? WS_EX_LAYERED : 0; SetWindowLong(hwndDlg , GWL_EXSTYLE , ws); if (dat->flags & SMF_USETRANSPARENCY) { pSetLayeredWindowAttributes(hwndDlg, RGB(255,255,255), (BYTE)(255-g_dat->inactiveAlpha), LWA_ALPHA); // RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); } //SetWindowPos(dat->hwndTabs, 0, 0, -10, 0, 0, SWP_NOSIZE | SWP_NOZORDER); if (!(dat->flags & SMF_SHOWSTATUSBAR)) { ShowWindow(dat->hwndStatus, SW_HIDE); } if (dat->flags & SMF_USETABS) { if (ScriverRestoreWindowPosition(hwndDlg, NULL, SRMMMOD, "", 0, SW_HIDE)) { SetWindowPos(hwndDlg, 0, 0, 0, 450, 300, SWP_NOZORDER | SWP_NOMOVE | SWP_HIDEWINDOW); } } else { int savePerContact = DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_SAVEPERCONTACT, SRMSGDEFSET_SAVEPERCONTACT); if (ScriverRestoreWindowPosition(hwndDlg, savePerContact ? dat->hContact : NULL, SRMMMOD, "", 0, SW_HIDE)) { //if (Utils_RestoreWindowPosition(GetParent(hwndDlg), savePerContact ? dat->hContact : NULL, SRMMMOD, "")) { if (savePerContact) { if (ScriverRestoreWindowPosition(hwndDlg, NULL, SRMMMOD, "", RWPF_NOSIZE, SW_HIDE)) // if (Utils_RestoreWindowPositionNoMove(GetParent(hwndDlg), NULL, SRMMMOD, "")) SetWindowPos(GetParent(hwndDlg), 0, 0, 0, 450, 300, SWP_NOZORDER | SWP_NOMOVE); } else SetWindowPos(hwndDlg, 0, 0, 0, 450, 300, SWP_NOZORDER | SWP_NOMOVE); } if (!savePerContact && DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_CASCADE, SRMSGDEFSET_CASCADE)) WindowList_Broadcast(g_dat->hParentWindowList, DM_CASCADENEWWINDOW, (WPARAM) hwndDlg, (LPARAM) & dat->windowWasCascaded); } } return TRUE; case WM_GETMINMAXINFO: { MINMAXINFO *mmi = (MINMAXINFO *) lParam; SIZE size; if (GetKeyState(VK_CONTROL) & 0x8000) { WINDOWPLACEMENT wp; RECT rcDesktop; wp.length = sizeof(wp); GetWindowPlacement(hwndDlg, &wp); SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDesktop, 0); mmi->ptMaxSize.x = wp.rcNormalPosition.right - wp.rcNormalPosition.left; mmi->ptMaxSize.y = rcDesktop.bottom - rcDesktop.top; mmi->ptMaxPosition.x = wp.rcNormalPosition.left; if(IsIconic(hwndDlg)) { mmi->ptMaxPosition.y = rcDesktop.top; } else { mmi->ptMaxPosition.y = 0; } } GetMinimunWindowSize(dat, &size); mmi->ptMinTrackSize.x = size.cx; mmi->ptMinTrackSize.y = size.cy; return FALSE; } case WM_SIZE: if (wParam == SIZE_MINIMIZED) { dat->bMinimized = 1; } if (IsIconic(hwndDlg)) { MoveWindow(dat->hwndActive, dat->childRect.left, dat->childRect.top, dat->childRect.right-dat->childRect.left, dat->childRect.bottom - dat->childRect.top, TRUE); } else { // } // if (!IsIconic(hwndDlg)) { int i; RECT rc, rcStatus, rcChild, rcWindow; SIZE size; dat->bMinimized = 0; GetClientRect(hwndDlg, &rc); GetWindowRect(hwndDlg, &rcWindow); rcStatus.top = rcStatus.bottom = 0; if (dat->flags & SMF_SHOWSTATUSBAR) { int statwidths[4]; GetWindowRect(dat->hwndStatus, &rcStatus); statwidths[0] = rc.right - rc.left - SB_CHAR_WIDTH - SB_TYPING_WIDTH; statwidths[1] = rc.right - rc.left - SB_TYPING_WIDTH; statwidths[2] = -1; SendMessage(dat->hwndStatus, SB_SETPARTS, 3, (LPARAM) statwidths); SendMessage(dat->hwndStatus, WM_SIZE, 0, 0); } MoveWindow(dat->hwndTabs, 0, 2, (rc.right - rc.left), (rc.bottom - rc.top) - (rcStatus.bottom - rcStatus.top) - 2, FALSE); RedrawWindow(dat->hwndTabs, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE); GetMinimunWindowSize(dat, &size); if ((rcWindow.bottom-rcWindow.top) < size.cy || (rcWindow.right-rcWindow.left) < size.cx) { if ((rcWindow.bottom-rcWindow.top) < size.cy) { rcWindow.bottom = rcWindow.top + size.cy; } if ((rcWindow.right-rcWindow.left) < size.cx) { rcWindow.right = rcWindow.left + size.cx; } MoveWindow(hwndDlg, rcWindow.left, rcWindow.top, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, TRUE); } GetChildWindowRect(dat, &rcChild); memcpy(&dat->childRect, &rcChild, sizeof(RECT)); for (i=0;i<dat->childrenCount;i++) { if (dat->children[i] == dat->hwndActive) { MoveWindow(dat->children[i], rcChild.left, rcChild.top, rcChild.right-rcChild.left, rcChild.bottom - rcChild.top, TRUE); RedrawWindow(GetDlgItem(dat->children[i], IDC_LOG), NULL, NULL, RDW_INVALIDATE); } } if (dat->flags & SMF_SHOWSTATUSBAR) { RedrawWindow(dat->hwndStatus, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE); } } return FALSE; case WM_SETFOCUS: if (dat->hwndActive != NULL) { SetFocus(dat->hwndActive); } return TRUE; case WM_CLOSE: DestroyWindow(hwndDlg); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: //DestroyWindow(hwndDlg); return TRUE; } case WM_NOTIFY: { NMHDR* pNMHDR = (NMHDR*) lParam; if (pNMHDR->hwndFrom == dat->hwndTabs) { switch (pNMHDR->code) { case TCN_SELCHANGE: { TCITEM tci = {0}; int iSel = TabCtrl_GetCurSel(dat->hwndTabs); tci.mask = TCIF_PARAM; if (TabCtrl_GetItem(dat->hwndTabs, iSel, &tci)) { struct MessageWindowData * mdat = (struct MessageWindowData *) tci.lParam; ActivateChild(dat, mdat->hwnd); SetFocus(dat->hwndActive); } } break; case NM_RCLICK: { TCHITTESTINFO thinfo; int tabId, x, y; GetCursorPos(&thinfo.pt); x = thinfo.pt.x; y = thinfo.pt.y; ScreenToClient(dat->hwndTabs, &thinfo.pt); tabId = TabCtrl_HitTest(dat->hwndTabs, &thinfo); if (tabId != -1) { struct MessageWindowData * mwd = GetChildFromTab(dat->hwndTabs, tabId); //CallService(MS_USERINFO_SHOWDIALOG, (WPARAM) mwd->hContact, 0); HMENU hMenu = (HMENU) CallService(MS_CLIST_MENUBUILDCONTACT, (WPARAM) mwd->hContact, 0); TrackPopupMenu(hMenu, 0, x, y, 0, mwd->hwnd, NULL); DestroyMenu(hMenu); } } break; } } else if (pNMHDR->hwndFrom == dat->hwndStatus) { switch (pNMHDR->code) { case NM_CLICK: { NMMOUSE *nm=(NMMOUSE*)lParam; RECT rc; SendMessage(dat->hwndStatus, SB_GETRECT, SendMessage(dat->hwndStatus, SB_GETPARTS, 0, 0) - 1, (LPARAM)&rc); if (nm->pt.x >= rc.left) SendMessage(dat->hwndActive, DM_SWITCHUNICODE, 0, 0); } } break; } } break; case WM_DROPFILES: SendMessage(dat->hwndActive, WM_DROPFILES, wParam, lParam); break; case WM_TIMER: if (wParam == TIMERID_FLASHWND) { if ((dat->nFlash > dat->nFlashMax)) {// || ((GetActiveWindow() == hwndDlg) && (GetForegroundWindow() == hwndDlg))) { KillTimer(hwndDlg, TIMERID_FLASHWND); FlashWindow(hwndDlg, FALSE); } else if (dat->nFlash < dat->nFlashMax) { FlashWindow(hwndDlg, TRUE); dat->nFlash++; } } break; case WM_CONTEXTMENU: { if (dat->hwndStatus && dat->hwndStatus == (HWND) wParam) { RECT rc; POINT pt, pt2; GetCursorPos(&pt); pt2.x = pt.x; pt2.y = pt.y; ScreenToClient(dat->hwndStatus, &pt); SendMessage(dat->hwndStatus, SB_GETRECT, SendMessage(dat->hwndStatus, SB_GETPARTS, 0, 0) - 1, (LPARAM)&rc); if (pt.x >= rc.left && dat->hwndActive != NULL) { int codePage = (int) SendMessage(dat->hwndActive, DM_GETCODEPAGE, 0, 0); int i, iSel; for(i = 0; i < GetMenuItemCount(g_dat->hMenuANSIEncoding); i++) { CheckMenuItem (g_dat->hMenuANSIEncoding, i, MF_BYPOSITION | MF_UNCHECKED); } if(codePage == CP_ACP) { CheckMenuItem(g_dat->hMenuANSIEncoding, 0, MF_BYPOSITION | MF_CHECKED); } else { CheckMenuItem(g_dat->hMenuANSIEncoding, codePage, MF_BYCOMMAND | MF_CHECKED); } iSel = TrackPopupMenu(g_dat->hMenuANSIEncoding, TPM_RETURNCMD, pt2.x, pt2.y, 0, hwndDlg, NULL); if (iSel >= 500) { if (iSel == 500) iSel = CP_ACP; SendMessage(dat->hwndActive, DM_SETCODEPAGE, 0, iSel); } } else SendMessage(dat->hwndActive, WM_CONTEXTMENU, (WPARAM)hwndDlg, 0); } break; } case WM_ACTIVATE: if (LOWORD(wParam) == WA_INACTIVE) { ws = GetWindowLong(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED; ws |= dat->flags & SMF_USETRANSPARENCY ? WS_EX_LAYERED : 0; SetWindowLong(hwndDlg , GWL_EXSTYLE , ws); if (dat->flags & SMF_USETRANSPARENCY) { pSetLayeredWindowAttributes(hwndDlg, RGB(255,255,255), (BYTE)(255-g_dat->inactiveAlpha), LWA_ALPHA); // RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); } } if (LOWORD(wParam) != WA_ACTIVE) break; if (dat->hwndActive == NULL) { // do not set foreground window at all (always stay in the background !) // SendMessage(hwndDlg, DM_DEACTIVATE, 0, 0); } else { PostMessage(hwndDlg, WM_SETFOCUS, 0, 0); } case WM_MOUSEACTIVATE: if (KillTimer(hwndDlg, TIMERID_FLASHWND)) { FlashWindow(hwndDlg, FALSE); dat->nFlash = 0; } ws = GetWindowLong(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED; ws |= dat->flags & SMF_USETRANSPARENCY ? WS_EX_LAYERED : 0; SetWindowLong(hwndDlg , GWL_EXSTYLE , ws); if (dat->flags & SMF_USETRANSPARENCY) { pSetLayeredWindowAttributes(hwndDlg, RGB(255,255,255), (BYTE)(255-g_dat->activeAlpha), LWA_ALPHA); // RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); } break; case WM_LBUTTONDOWN: if (!IsZoomed(hwndDlg)) { POINT pt; GetCursorPos(&pt); // dat->mouseLBDown = 1; // GetCursorPos(&dat->mouseLBDownPos); return SendMessage(hwndDlg, WM_SYSCOMMAND, SC_MOVE | HTCAPTION, MAKELPARAM(pt.x, pt.y)); // SetCapture(hwndDlg); } break; case WM_LBUTTONUP: //if (dat->mouseLBDown) { // dat->mouseLBDown = 0; // ReleaseCapture(); //} break; case WM_MOUSEMOVE:/* if (dat->mouseLBDown) { POINT pt; RECT rc; GetCursorPos(&pt); GetWindowRect(hwndDlg, &rc); SetWindowPos(hwndDlg, 0, rc.left - (dat->mouseLBDownPos.x - pt.x), rc.top - (dat->mouseLBDownPos.y - pt.y), 0, 0, SWP_NOZORDER | SWP_NOSIZE); dat->mouseLBDownPos = pt; }*/ break; case WM_MOVING: { int snapPixels = 10; RECT rcDesktop; RECT *pRect = (RECT *)lParam; POINT pt; SIZE szSize = {pRect->right-pRect->left,pRect->bottom-pRect->top}; GetCursorPos(&pt); SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDesktop, 0); pRect->left = pt.x-dat->mouseLBDownPos.x; pRect->top = pt.y-dat->mouseLBDownPos.y; pRect->right = pRect->left+szSize.cx; pRect->bottom = pRect->top+szSize.cy; if (!(GetAsyncKeyState(VK_CONTROL) & 0x8000)) { if(pRect->top < snapPixels && pRect->top > -snapPixels) { pRect->top = 0; pRect->bottom = szSize.cy; } if(pRect->left < snapPixels && pRect->left > -snapPixels) { pRect->left = 0; pRect->right = szSize.cx; } if(pRect->right < rcDesktop.right+snapPixels && pRect->right > rcDesktop.right-snapPixels) { pRect->right = rcDesktop.right; pRect->left = rcDesktop.right-szSize.cx; } if(pRect->bottom < rcDesktop.bottom+snapPixels && pRect->bottom > rcDesktop.bottom-snapPixels) { pRect->bottom = rcDesktop.bottom; pRect->top = rcDesktop.bottom-szSize.cy; } } } break; case WM_SYSCOMMAND: if ((wParam & 0xFFF0) == SC_MOVE) { RECT rc; GetWindowRect(hwndDlg, &rc); dat->mouseLBDownPos.x = LOWORD(lParam) - rc.left; dat->mouseLBDownPos.y = HIWORD(lParam) - rc.top; } break; case WM_DESTROY: { g_dat->hParent = NULL; SetWindowLong(hwndDlg, GWL_USERDATA, 0); WindowList_Remove(g_dat->hParentWindowList, hwndDlg); if (dat->children!=NULL) free (dat->children); free(dat->tabCtrlDat); free(dat); if (dat->flags & SMF_USETABS) { WINDOWPLACEMENT wp = { 0 }; wp.length = sizeof(wp); GetWindowPlacement(hwndDlg, &wp); DBWriteContactSettingDword(NULL, SRMMMOD, "x", wp.rcNormalPosition.left); DBWriteContactSettingDword(NULL, SRMMMOD, "y", wp.rcNormalPosition.top); DBWriteContactSettingDword(NULL, SRMMMOD, "width", wp.rcNormalPosition.right - wp.rcNormalPosition.left); DBWriteContactSettingDword(NULL, SRMMMOD, "height", wp.rcNormalPosition.bottom - wp.rcNormalPosition.top); } else { WINDOWPLACEMENT wp = { 0 }; HANDLE hContact; if (DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_SAVEPERCONTACT, SRMSGDEFSET_SAVEPERCONTACT)) hContact = dat->hContact; else hContact = NULL; wp.length = sizeof(wp); GetWindowPlacement(hwndDlg, &wp); if (!dat->windowWasCascaded) { DBWriteContactSettingDword(hContact, SRMMMOD, "x", wp.rcNormalPosition.left); DBWriteContactSettingDword(hContact, SRMMMOD, "y", wp.rcNormalPosition.top); } DBWriteContactSettingDword(hContact, SRMMMOD, "width", wp.rcNormalPosition.right - wp.rcNormalPosition.left); DBWriteContactSettingDword(hContact, SRMMMOD, "height", wp.rcNormalPosition.bottom - wp.rcNormalPosition.top); } } break; case DM_DEACTIVATE: SetForegroundWindow(dat->foregroundWindow); break; case DM_ERRORDECIDED: break; case DM_STARTFLASHING: if (GetActiveWindow() != hwndDlg || GetForegroundWindow() != hwndDlg) { dat->nFlash = 0; SetTimer(hwndDlg, TIMERID_FLASHWND, TIMEOUT_FLASHWND, NULL); } break; case DM_REMOVECHILD: { RemoveChild(dat, (HWND) lParam); if (dat->childrenCount != 0) { SetFocus(dat->hwndActive); } else { DestroyWindow(hwndDlg); } } return TRUE; case DM_ADDCHILD: { struct MessageWindowData * mdat = (struct MessageWindowData *) lParam; AddChild(dat, mdat); } return TRUE; case DM_ACTIVATECHILD: if((HWND) lParam != dat->hwndActive) { ActivateChild(dat, (HWND) lParam); } return TRUE; case DM_ACTIVATEPREV: ActivatePrevChild(dat, (HWND) lParam); SetFocus(dat->hwndActive); return TRUE; case DM_ACTIVATENEXT: ActivateNextChild(dat, (HWND) lParam); SetFocus(dat->hwndActive); return TRUE; case DM_SENDMESSAGE: { int i; for (i=0;i<dat->childrenCount;i++) { SendMessage(dat->children[i], DM_SENDMESSAGE, wParam, lParam); } } break; case DM_OPTIONSAPPLIED: { RECT rc; dat->flags = g_dat->flags; if (!(dat->flags & SMF_SHOWSTATUSBAR)) { ShowWindow(dat->hwndStatus, SW_HIDE); } else { ShowWindow(dat->hwndStatus, SW_SHOW); } ws = GetWindowLong(hwndDlg, GWL_STYLE) & ~(WS_CAPTION); if (dat->flags & SMF_SHOWTITLEBAR) { ws |= WS_CAPTION; } SetWindowLong(hwndDlg, GWL_STYLE, ws); ws = GetWindowLong(hwndDlg, GWL_EXSTYLE)& ~WS_EX_LAYERED; ws |= dat->flags & SMF_USETRANSPARENCY ? WS_EX_LAYERED : 0; SetWindowLong(hwndDlg , GWL_EXSTYLE , ws); if (dat->flags & SMF_USETRANSPARENCY) { pSetLayeredWindowAttributes(hwndDlg, RGB(255,255,255), (BYTE)(255-g_dat->inactiveAlpha), LWA_ALPHA); // RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); } ws = GetWindowLong(dat->hwndTabs, GWL_STYLE) & ~(TCS_BOTTOM); if (dat->flags & SMF_TABSATBOTTOM) { ws |= TCS_BOTTOM; } SetWindowLong(dat->hwndTabs, GWL_STYLE, ws); RedrawWindow(dat->hwndTabs, NULL, NULL, RDW_INVALIDATE); GetWindowRect(hwndDlg, &rc); SetWindowPos(hwndDlg, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING); SendMessage(hwndDlg, WM_SIZE, 0, 0); //RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); break; } case DM_UPDATETITLE: { struct MessageWindowData * mdat = (struct MessageWindowData *) lParam; TCITEM tci; int tabId; TCHAR *tContactName; if (mdat && mdat->hwnd == dat->hwndActive) { TCHAR *newtitle, oldtitle[256]; #if defined ( _UNICODE ) newtitle = GetWindowTitle(mdat->hContact, mdat->szProto); #else newtitle = GetWindowTitle(mdat->hContact, mdat->szProto); #endif GetWindowText(hwndDlg, oldtitle, sizeof(oldtitle)); if (lstrcmp(newtitle, oldtitle)) { //swt() flickers even if the title hasn't actually changed SetWindowText(hwndDlg, newtitle); //SendMessage(hwndDlg, WM_SIZE, 0, 0); } free(newtitle); } tabId = GetTabFromHWND(dat, mdat->hwnd); tContactName = GetTabName(mdat->hContact); tci.mask = TCIF_TEXT; tci.pszText = tContactName; TabCtrl_SetItem(dat->hwndTabs, tabId, &tci); free(tContactName); break; } case DM_UPDATEWINICON: { struct MessageWindowData * mdat = (struct MessageWindowData *) lParam; if (mdat) { if (mdat->szProto) { int i, icoIdx = 0; WORD wStatus; char *szProto = mdat->szProto; HANDLE hContact = mdat->hContact; if (strcmp(mdat->szProto, "MetaContacts") == 0 && DBGetContactSettingByte(NULL,"CLC","Meta",0) == 0) { hContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT,(UINT)mdat->hContact, 0); if (hContact != NULL) { szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(UINT)hContact,0); } else { hContact = mdat->hContact; } } wStatus = DBGetContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE); mdat->wStatus = wStatus; if (mdat->hwnd == dat->hwndActive) { if (DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_STATUSICON, SRMSGDEFSET_STATUSICON)) { if (mdat->showTyping && (g_dat->flags&SMF_SHOWTYPINGWIN)) { SendMessage(hwndDlg, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) g_dat->hIcons[SMF_ICON_TYPING]); } else if (mdat->showUnread && (GetActiveWindow() != hwndDlg || GetForegroundWindow() != hwndDlg)) { SendMessage(hwndDlg, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) LoadSkinnedIcon(SKINICON_EVENT_MESSAGE)); } else { SendMessage(hwndDlg, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) LoadSkinnedProtoIcon(szProto, wStatus)); } } else { SendMessage(hwndDlg, WM_SETICON, (WPARAM) ICON_BIG, (LPARAM) LoadSkinnedIcon(SKINICON_EVENT_MESSAGE)); } } SendDlgItemMessage(mdat->hwnd, IDC_USERMENU, BM_SETIMAGE, IMAGE_ICON, (LPARAM) LoadSkinnedProtoIcon(szProto, wStatus)); icoIdx = 0; for (i = 0; i < g_dat->protoNum; i++) { if (!strcmp(g_dat->protoNames[i], szProto)) { icoIdx = wStatus - ID_STATUS_OFFLINE + (ID_STATUS_OUTTOLUNCH - ID_STATUS_OFFLINE + 1) * (i +1) + 2; break; } } if (mdat->hwnd != dat->hwndActive) { if (mdat->showTyping) { icoIdx = 1; } else if (mdat->showUnread & 1) { icoIdx = 0; } } i = GetTabFromHWND(dat, mdat->hwnd); if (i>=0) { TCITEM tci; tci.mask = TCIF_IMAGE; tci.iImage = icoIdx; TabCtrl_SetItem(dat->hwndTabs, i, &tci); } } } break; } case DM_UPDATESTATUSBAR: break; case DM_SWITCHSTATUSBAR: dat->flags ^= SMF_SHOWSTATUSBAR; if (!(dat->flags & SMF_SHOWSTATUSBAR)) { ShowWindow(dat->hwndStatus, SW_HIDE); } else { ShowWindow(dat->hwndStatus, SW_SHOW); } SendMessage(hwndDlg, WM_SIZE, 0, 0); break; case DM_SWITCHTOOLBAR: { int i; dat->flags ^= SMF_SHOWBTNS; for (i=0;i<dat->childrenCount;i++) { SendMessage(dat->children[i], DM_SWITCHTOOLBAR, 0, 0); } SendMessage(hwndDlg, WM_SIZE, 0, 0); } break; case DM_SWITCHTITLEBAR: { RECT rc; dat->flags ^= SMF_SHOWTITLEBAR; ws = GetWindowLong(hwndDlg, GWL_STYLE) & ~(WS_CAPTION); if (dat->flags & SMF_SHOWTITLEBAR) { ws |= WS_CAPTION; } SetWindowLong(hwndDlg, GWL_STYLE, ws); GetWindowRect(hwndDlg, &rc); SetWindowPos(hwndDlg, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING); // SendMessage(hwndDlg, WM_SIZE, 0, 0); RedrawWindow(hwndDlg, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); } break; case DM_CASCADENEWWINDOW: if ((HWND) wParam == hwndDlg) break; { RECT rcThis, rcNew; GetWindowRect(hwndDlg, &rcThis); GetWindowRect((HWND) wParam, &rcNew); if (abs(rcThis.left - rcNew.left) < 3 && abs(rcThis.top - rcNew.top) < 3) { int offset = GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME); SetWindowPos((HWND) wParam, 0, rcNew.left + offset, rcNew.top + offset, 0, 0, SWP_NOZORDER | SWP_NOSIZE); *(int *) lParam = 1; } } break; //case DM_MESSAGESENDING: // dat->messagesInProgress += wParam ? -1 : 1; // if (dat->messagesInProgress < 0) dat->messagesInProgress = 0; // break; } return FALSE; }
void CGyfxyHostView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); CWnd *pListCtrl = GetDlgItem(IDC_LIST_RESULT); CWnd *pProgWnd = GetDlgItem(IDC_PROGRESS_STATE); ///////////////////////////////////////////////////////// CWnd *pButStart = GetDlgItem(IDC_TEST_START); CWnd *pButStop = GetDlgItem(IDC_TEST_STOP); CWnd *pButClose = GetDlgItem(ID_FILE_CLOSE); CWnd *pButRst = GetDlgItem(IDC_RESET); CWnd *pButWPot = GetDlgItem(ID_WEIGHT_POT); CWnd *pButWsample = GetDlgItem(ID_WEIGHT_SAMPLE); CWnd *pAutoNO = GetDlgItem(IDC_BUTTON_AUTO_NO); CWnd *pDownload = GetDlgItem(IDC_BUTTON_SAMPLE_DN); CWnd *pUpload = GetDlgItem(IDC_BUTTON_SAMPLE_UD); CWnd *pLeftTempText = GetDlgItem(IDC_STATIC_LEFT_TEMP); CWnd *pRightTempText = GetDlgItem(IDC_STATIC_RIGHT_TEMP); CWnd *pWaterTempText = GetDlgItem(IDC_STATIC_WATER_TEMP); CWnd *pInfo = GetDlgItem(IDC_STATIC_INFO); if(pProgWnd!=NULL) { RECT rect, rectProgress; RECT rectStart,rectStop,rectClose,rectRst,rectWPot,rectWsample,rectList; RECT rectAuto,rectDownload,rectUpload; RECT rectLeftTemp,rectRightTemp,rectWaterTemp,rectInfo; int iHeight; GetClientRect(&rect); pListCtrl->GetWindowRect(&rectList); pProgWnd->GetWindowRect(&rectProgress); ///////////////////////////////////////// pButStart->GetWindowRect(&rectStart); pButClose->GetWindowRect(&rectClose); pButRst->GetWindowRect(&rectRst); pButWPot->GetWindowRect(&rectWPot); pButWsample->GetWindowRect(&rectWsample); pAutoNO->GetWindowRect(&rectAuto); pDownload->GetWindowRect(&rectDownload); pUpload->GetWindowRect(&rectUpload); pLeftTempText->GetWindowRect(&rectLeftTemp); pRightTempText->GetWindowRect(&rectRightTemp); pWaterTempText->GetWindowRect(&rectWaterTemp); pInfo->GetWindowRect(&rectInfo); ///////////////////////////////////////////// ScreenToClient(&rectList); ScreenToClient(&rectProgress); ScreenToClient(&rectStart); ScreenToClient(&rectClose); ScreenToClient(&rectRst); ScreenToClient(&rectWPot); ScreenToClient(&rectWsample); ScreenToClient(&rectAuto); ScreenToClient(&rectDownload); ScreenToClient(&rectUpload); ScreenToClient(&rectLeftTemp); ScreenToClient(&rectRightTemp ); ScreenToClient(&rectWaterTemp); ScreenToClient(&rectInfo); /////////////////////////////////////////////////// //按钮 int iButHigh,iButWidth; iButHigh = rectStart.bottom - rectStart.top; iButWidth = rectStart.right - rectStart.left; // rectRst.left = 40; rectRst.right = 40+iButWidth; rectRst.bottom = rect.bottom-10; rectRst.top = rect.bottom-10-iButHigh; pButRst->MoveWindow(&rectRst); pButRst->Invalidate(FALSE); // rectClose.right = rect.right-40; rectClose.left = rect.right-40-iButWidth; rectClose.bottom = rect.bottom-10;; rectClose.top = rect.bottom-10-iButHigh; pButClose->MoveWindow(&rectClose); pButClose->Invalidate(FALSE); //称坩埚 rectWPot.left = 40+(rectClose.left-rectRst.left)/5; rectWPot.right = rectWPot.left +iButWidth; rectWPot.bottom = rect.bottom-10; rectWPot.top = rect.bottom-10-iButHigh; pButWPot->MoveWindow(&rectWPot); pButWPot->Invalidate(FALSE); //称样品 rectWsample.left = 40+(rectClose.left-rectRst.left)*2/5; rectWsample.right = rectWsample.left +iButWidth; rectWsample.bottom = rect.bottom-10; rectWsample.top = rect.bottom-10-iButHigh; pButWsample->MoveWindow(&rectWsample); pButWsample->Invalidate(FALSE); // rectStart.left = 40+(rectClose.left-rectRst.left)*3/5; rectStart.right = rectStart.left +iButWidth; rectStart.bottom = rect.bottom-10; rectStart.top = rect.bottom-10-iButHigh; pButStart->MoveWindow(&rectStart); pButStart->Invalidate(FALSE); rectStop.left = 40+(rectClose.left-rectRst.left)*4/5; rectStop.right = rectStop.left +iButWidth; rectStop.bottom = rect.bottom-10; rectStop.top = rect.bottom-10-iButHigh; pButStop->MoveWindow(&rectStop); pButStop->Invalidate(FALSE); //左温度,右温度 //中间炉子温度 //信息栏 int staticHigh,staticWidth = 0; staticHigh = rectLeftTemp.bottom - rectLeftTemp.top; staticWidth = 80; rectLeftTemp.left = 40; rectLeftTemp.right = 40+staticWidth; rectLeftTemp.bottom = (rect.bottom-100); rectLeftTemp.top = (rectLeftTemp.bottom-staticHigh); pLeftTempText->MoveWindow(&rectLeftTemp); pLeftTempText->Invalidate(FALSE); rectRightTemp.left = 40; rectRightTemp.right = 40+staticWidth; rectRightTemp.bottom = (rect.bottom-90+staticHigh); rectRightTemp.top = (rectRightTemp.bottom-staticHigh); pRightTempText->MoveWindow(&rectRightTemp); pRightTempText->Invalidate(FALSE); rectWaterTemp.left = rectRightTemp.left + 180;; rectWaterTemp.right = rectWaterTemp.left+staticWidth; rectWaterTemp.bottom = (rect.bottom-100); rectWaterTemp.top = (rectWaterTemp.bottom-staticHigh); pWaterTempText->MoveWindow(&rectWaterTemp); pWaterTempText->Invalidate(FALSE); rectInfo.left = rectRightTemp.left + 180;; rectInfo.right = rectInfo.left+staticWidth; rectInfo.bottom = (rect.bottom-90+staticHigh); rectInfo.top = (rectInfo.bottom-staticHigh); pInfo->MoveWindow(&rectInfo); pInfo->Invalidate(FALSE); //,,,; /* CWnd *pLeftTempText = GetDlgItem(IDC_STATIC_LEFT_TEMP); CWnd *pRightTempText = GetDlgItem(IDC_STATIC_RIGHT_TEMP); CWnd * = GetDlgItem(IDC_STATIC_WATER_TEMP); CWnd * = GetDlgItem(IDC_STATIC_INFO); */ //进度条 iHeight = rectProgress.top-rectProgress.bottom; rectProgress.right = rect.right-rectProgress.left; rectProgress.bottom = rect.bottom-40; rectProgress.top = rectProgress.bottom +iHeight; pProgWnd->MoveWindow(&rectProgress); pProgWnd->Invalidate(FALSE); /////////////////////////////////////////////////// iButHigh = rectAuto.bottom - rectAuto.top; iButWidth = rectAuto.right - rectAuto.left; rectAuto.left = 40; rectAuto.right = 40+iButWidth; rectAuto.top = rect.top+10; rectAuto.bottom = rect.top+10+iButHigh; pAutoNO->MoveWindow(&rectAuto); pAutoNO->Invalidate(FALSE); rectUpload.right = rect.right - 40; rectUpload.left = rectUpload.right-iButWidth; rectUpload.top = rect.top+10; rectUpload.bottom = rect.top+10+iButHigh; pUpload->MoveWindow(&rectUpload); pUpload->Invalidate(FALSE); rectDownload.left = (rectAuto.left+rectUpload.left)/2; rectDownload.right = rectDownload.left +iButWidth; rectDownload.top = rect.top+10; rectDownload.bottom = rect.top+10+iButHigh; pDownload->MoveWindow(&rectDownload); pDownload->Invalidate(FALSE); ////结果报告 rectList.right = rect.right-rectList.left; rectList.top = rectAuto.bottom +10; rectList.bottom = (rect.bottom-120); pListCtrl->MoveWindow(&rectList); pListCtrl->Invalidate(FALSE); /////////////////////////////////////////////////// } }
void CEx_DrawView::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CEx_DrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); m_bContextMenu = TRUE; if (pDoc->m_GM.m_DrawType == SELECT) { CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt); pt += m_ptLocalScroll; BOOL bResult = FALSE; GraphicHitTest(pt, bResult, m_iTrackID); if (bResult && pDoc->m_sel == m_iTrackID && m_iTrackID != -1) { CGraphic* P = Convert_To_Graphic(pDoc->m_obArray[m_iTrackID]); CRect rt; P->GetRect(rt); GraphicMember GM; P->UpdateData(&GM, FALSE); CMenu menu; CString title; GetCursorPos(&pt); menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING, 0x80, _T("----===== 画布信息 =====----")); title.Format(_T("图布大小: %dx%d"), m_size.cx, m_size.cy); menu.AppendMenu(MF_STRING, 0x81, title); menu.AppendMenu(MF_STRING, 0x200, _T("----===== 操作命令 =====----")); menu.AppendMenu(MF_STRING | MF_BYCOMMAND, 0x201, _T("编辑当前图形")); menu.AppendMenu(MF_STRING | MF_BYCOMMAND, 0x202, _T("删除当前图形")); menu.AppendMenu(MF_STRING, 0x100, _T("----===== 图形信息 =====----")); title.Format(_T("自定义名称: %s"), GM.m_lpszName); menu.AppendMenu(MF_STRING, 0x106, title); title.Format(_T("图像类型: %s"), P->GetName()); menu.AppendMenu(MF_STRING, 0x101, title); title.Format(_T("存放序号: %d"), m_iTrackID); menu.AppendMenu(MF_STRING, 0x102, title); title.Format(_T("节点数量: %d"), P->GetPts()); menu.AppendMenu(MF_STRING, 0x103, title); title.Format(_T("图像大小: %dx%d"), rt.Width(), rt.Height()); menu.AppendMenu(MF_STRING, 0x104, title); title.Format(_T("是否隐藏: %s"), GM.m_bHidden ? _T("是") : _T("否")); menu.AppendMenu(MF_STRING, 0x107, title); title.Format(_T("逻辑坐标: (%d, %d, %d, %d)"), rt.left, rt.top, rt.right, rt.bottom); menu.AppendMenu(MF_STRING, 0x105, title); menu.AppendMenu(MF_SEPARATOR); title.Format(_T("创建时间: %s"), GM.m_createTime.Format("%c")); menu.AppendMenu(MF_STRING, 0x300, title); title.Format(_T("修改时间: %s"), GM.m_modifiedTime.Format("%c")); menu.AppendMenu(MF_STRING, 0x301, title); menu.AppendMenu(MF_SEPARATOR); title.Format(_T("画笔类型: %s"), CGraphic::GetPenStyleById(GM.m_iPenStyle, FALSE)); menu.AppendMenu(MF_STRING, 0x125, title); if (!IF_NULL_PEN(GM.m_iPenStyle)) { title.Format(_T("画笔颜色: RGB(%d, %d, %d)"), GetRValue(GM.m_clrPen), GetGValue(GM.m_clrPen), GetBValue(GM.m_clrPen)); menu.AppendMenu(MF_STRING, 0x120, title); title.Format(_T("画笔粗细: %d"), GM.m_iPenWidth); menu.AppendMenu(MF_STRING, 0x122, title); } menu.AppendMenu(MF_SEPARATOR); if (P->EnableBrush()) { title.Format(_T("画笔类型: %s"), CGraphic::GetBrushStyleById(GM.m_iBrushStyle, FALSE)); menu.AppendMenu(MF_STRING, 0x400, title); if (!IF_NULL_BRUSH(GM.m_iBrushStyle)) { title.Format(_T("画刷颜色: RGB(%d, %d, %d)"), GetRValue(GM.m_clrBrush), GetGValue(GM.m_clrBrush), GetBValue(GM.m_clrBrush)); menu.AppendMenu(MF_STRING, 0x401, title); } } menu.TrackPopupMenu(0, pt.x, pt.y, this); } } else { pDoc->m_GM.m_DrawType = SELECT; pDoc->UpdateAllViews(NULL, 0x2000); } }
BOOL CDlgMaintabDownload::OnInitDialog() { CResizableDialog::OnInitDialog(); // get last active tab id in MaintabDownload int nLastActiveTab = thePrefs.GetMaintabDownloadLastActiveTab(); ETabId eLastActiveTabId; switch (nLastActiveTab) { case TI_DOWNLOADING: eLastActiveTabId = TI_DOWNLOADING; break; case TI_DOWNLOADED: eLastActiveTabId = TI_DOWNLOADED; break; case TI_RSSWND: eLastActiveTabId = TI_RSSWND; break; default: eLastActiveTabId = TI_DOWNLOADING; break; } ModifyStyle(0, WS_CLIPCHILDREN); theWndMgr.SetWndHandle(CWndMgr::WI_MAINTAB_DOWNLOAD_DLG, m_hWnd); InitTabs(); if(thePrefs.GetSplitterbarPositionDownload() == 100) { m_wndSplitter.m_nflag = 0; m_wndSplitter.m_bActive = FALSE; } else { m_wndSplitter.m_nflag = 1; m_wndSplitter.m_bActive = TRUE; } //m_wndSplitter.m_nflag = 1; CRect rcWnd; GetWindowRect(rcWnd); ScreenToClient(rcWnd); InitControlContainer(); LONG splitpos = thePrefs.GetSplitterbarPositionDownload() * rcWnd.Height() / 100; CRect rcDlgItem; m_DownloadTabWnd.GetWindowRect(rcDlgItem); ScreenToClient(rcDlgItem); rcDlgItem.bottom = splitpos - m_wndSplitter.GetHBreadth(); m_DownloadTabWnd.MoveWindow(rcDlgItem); m_tabwndInfo.GetWindowRect(rcDlgItem); ScreenToClient(rcDlgItem); rcDlgItem.top = splitpos; m_tabwndInfo.MoveWindow(rcDlgItem); AddAnchor(m_DownloadTabWnd, TOP_LEFT, CSize(100, thePrefs.GetSplitterbarPositionDownload())); AddAnchor(m_wndSplitter, CSize(0, thePrefs.GetSplitterbarPositionDownload()), BOTTOM_RIGHT); AddAnchor(m_tabwndInfo, CSize(0, thePrefs.GetSplitterbarPositionDownload()), BOTTOM_RIGHT); SetDownloadlistActiveTab(eLastActiveTabId); return TRUE; }
void COscillogram::OnMouseMove(UINT nFlags, CPoint point) { CStringArray valArray; CDWordArray colArray; CString strVal; CRect mRect; CClientDC dc(this); float length; //鼠标位置绝对象素数 float gValue; int oldMode; int curCell; //所在单元格 CPen pen(PS_SOLID,0,RGB(0,0,0)); BOOL PtState = FALSE; //(整个函数过程的功能)计算所有线所在单元格的数值 oldMode = dc.SetMapMode(MM_LOMETRIC); SetOscillogramRect(&dc); dc.SelectObject(&pen); dc.SetROP2(R2_NOTXORPEN); dc.DPtoLP(&point); //如果 鼠标不在波形图内 或者 没有曲线 不做处理返回 if(!(point.x >= m_GridRect.left && point.x <= m_GridRect.right+3 && point.y <= m_GridRect.top && point.y >= m_GridRect.bottom) || GetCurveCount() < 1 || m_showTitle == FALSE) { if(m_bPt.x != -1) { DrawMouseLine(&dc,m_bPt); m_bPt =-1; } m_TitleTip.ShowWindow(SW_HIDE); return; } //绘画跟随鼠标的十字线 if(m_bPt.x == -1) { m_bPt = point; DrawMouseLine(&dc,point); } else { DrawMouseLine(&dc,m_bPt); m_bPt = point; DrawMouseLine(&dc,point); } //计算个单元格数值 length = (float)( point.x - m_GridRect.left ); curCell = (int)( length / m_xSpan ); if(!m_showTime) { float n1 = (m_xMaxVal - m_xMinVal)/(m_xCount-1); float n2 = m_xMinVal + curCell*n1; strVal.Format("%s: %.2f",m_xText,n2); } else { CTimeSpan m_xTimeSpan = 0; CTimeSpan sc = m_endTime - m_beginTime; CTime cnTime = m_beginTime; double secCount = (sc.GetDays()*86400) + (sc.GetHours()*3600) + (sc.GetMinutes()*60) + sc.GetSeconds(); secCount = secCount / (m_xCount-1); int day = (int)secCount/86400; //天 secCount -= day*86400; int hour = (int)secCount/3600; //小时 secCount -= hour*3600; int minute = (int)secCount/60; //分钟 secCount -= minute*60; int second = (int)secCount; //秒 m_xTimeSpan = CTimeSpan(day,hour,minute,second); for(int j=0;j<curCell;j++) cnTime += m_xTimeSpan; strVal.Format("%s: %s",m_xText,cnTime.Format("%Y/%m/%d %H:%M:%S")); } colArray.Add(RGB(0,0,0)); valArray.Add(strVal); for(int i=0;i<GetCurveCount();i++) { gValue = GetCurve(i)->ptVal.GetPointValue(curCell,PtState); if(PtState) strVal.Format("%s: %.2f",GetCurveName(i),gValue); else strVal.Format("%s: ",GetCurveName(i)); colArray.Add(GetCurve(i)->lColor); valArray.Add(strVal); } //显示浮动窗体 dc.LPtoDP(&point); dc.SetMapMode(oldMode); //窗口跟随鼠标位置移动 GetClientRect(mRect); mRect.left += CS_LMARGIN; mRect.top += CS_LMARGIN; mRect.right -= CS_LMARGIN; mRect.bottom -= CS_LMARGIN; ClientToScreen(&point); ClientToScreen(&mRect); m_TitleTip.SetParentRect(mRect); m_TitleTip.SetStrArray(valArray,colArray); m_TitleTip.SetPos(&point); ScreenToClient(&point); CWnd::OnMouseMove(nFlags, point); }