static void qutim_init_dwm() { static bool inited = false; if (inited) return; inited = true; QLibrary dwm("dwmapi"); qutim_DwmSetWindowAttribute = reinterpret_cast<DwmSetWindowAttribute_t>(dwm.resolve("DwmSetWindowAttribute")); qutim_DwmSetIconicThumbnail = reinterpret_cast<DwmSetIconicThumbnail_t>(dwm.resolve("DwmSetIconicThumbnail")); qutim_DwmSetIconicLivePreviewBitmap = reinterpret_cast<DwmSetIconicLivePreviewBitmap_t>(dwm.resolve("DwmSetIconicLivePreviewBitmap")); qutim_DwmInvalidateIconicBitmaps = reinterpret_cast<DwmInvalidateIconicBitmaps_t>(dwm.resolve("DwmInvalidateIconicBitmaps")); }
void CRemoteFileDialog::OnSize(UINT nType, int cx, int cy) { CRuntimeDlg::OnSize(nType, cx, cy); if (!GetDlgItem(IDC_CURRENTFOLDER)) { return; // not ready } // we use the cancel button as our placeholder CRect rCancel = OffsetCtrl(IDCANCEL); CDlgUnits dlu(*this); int nXOffset = cx - rCancel.right - dlu.ToPixelsX(7); int nYOffset = cy - rCancel.bottom - dlu.ToPixelsY(7); CDeferWndMove dwm(10); dwm.ResizeCtrl(this, IDC_CURRENTFOLDER, nXOffset, 0); dwm.ResizeCtrl(this, IDC_FILELIST, nXOffset, nYOffset); if (m_toolbar.GetSafeHwnd()) { CRect rToolbar = OffsetCtrl(AFX_IDW_TOOLBAR); rToolbar.OffsetRect(nXOffset, 0); dwm.MoveWindow(&m_toolbar, rToolbar); } CRect rCtrl = OffsetCtrl(IDC_FILETYPES); rCtrl.right += nXOffset; rCtrl.OffsetRect(0, nYOffset); dwm.MoveWindow(GetDlgItem(IDC_FILETYPES), rCtrl); rCtrl = OffsetCtrl(IDC_FILENAME); rCtrl.right += nXOffset; rCtrl.OffsetRect(0, nYOffset); dwm.MoveWindow(GetDlgItem(IDC_FILENAME), rCtrl); dwm.OffsetCtrl(this, IDC_FILENAMELABEL, 0, nYOffset); dwm.OffsetCtrl(this, IDC_FILETYPESLABEL, 0, nYOffset); dwm.OffsetCtrl(this, IDOK, nXOffset, nYOffset); dwm.OffsetCtrl(this, IDCANCEL, nXOffset, nYOffset); CRect rGrip = OffsetCtrl(IDC_GRIPPER); rGrip.OffsetRect(cx - rGrip.right, cy - rGrip.bottom); dwm.MoveWindow(GetDlgItem(IDC_GRIPPER), rGrip); }
void CPreferencesDlg::Resize(int cx, int cy) { if (cx == 0 || cy == 0) { CRect rClient; GetClientRect(rClient); cx = rClient.Width(); cy = rClient.Height(); } // calculate deltas int nDX = cx - m_sizeCurrent.cx; int nDY = cy - m_sizeCurrent.cy; if (nDX == 0 && nDY == 0) return; m_sizeCurrent.cx = cx; m_sizeCurrent.cy = cy; CDeferWndMove dwm(10); // offset buttons dwm.OffsetCtrl(this, IDC_HELP2, 0, nDY); dwm.OffsetCtrl(this, IDOK, nDX, nDY); dwm.OffsetCtrl(this, IDCANCEL, nDX, nDY); dwm.OffsetCtrl(this, IDC_APPLY, nDX, nDY); // resize tree dwm.ResizeCtrl(this, IDC_PAGES, 0, nDY); // PPHost and label and border dwm.ResizeCtrl(this, m_pphost.GetDlgCtrlID(), nDX, nDY); dwm.ResizeCtrl(this, IDC_PAGE_TITLE, nDX, 0); dwm.ResizeCtrl(this, IDC_HOSTFRAME, nDX, nDY); GetDlgItem(IDC_HOSTFRAME)->Invalidate(TRUE); }
int CTDLFilterBar::ReposControls(int nWidth, BOOL bCalcOnly) { CDeferWndMove dwm(bCalcOnly ? 0 : NUMFILTERCTRLS + 1); if (nWidth <= 0) { CRect rClient; GetClientRect(rClient); nWidth = rClient.Width(); } // Note: All calculations are performed in DLU until just before the move // is performed. This ensures that we minimize the risk of rounding errors. CDlgUnits dlu(*this); int nXPosDLU = 0, nYPosDLU = 0; int nWidthDLU = dlu.FromPixelsX(nWidth), nCtrlHeightDLU = CTRLHEIGHT; for (int nCtrl = 0; nCtrl < NUMFILTERCTRLS; nCtrl++) { CRect rCtrl, rCtrlDLU; const FILTERCTRL& fc = FILTERCTRLS[nCtrl]; // display this control only if the corresponding column // is also showing BOOL bWantCtrl = WantShowFilter(fc.nType); if (bWantCtrl) { // if we're at the start of the line then just move ctrls // else we must check whether there's enough space to fit if (nXPosDLU > 0) // we're not the first { // do we fit? if ((nXPosDLU + CTRLLEN) > nWidthDLU) // no { // move to next line nXPosDLU = 0; nYPosDLU += CTRLYSPACING + (2 * nCtrlHeightDLU); } } // move label rCtrlDLU.left = nXPosDLU; rCtrlDLU.right = nXPosDLU + CTRLLEN; rCtrlDLU.top = nYPosDLU; rCtrlDLU.bottom = nYPosDLU + nCtrlHeightDLU; rCtrl = rCtrlDLU; dlu.ToPixels(rCtrl); if (fc.nIDLabel && !bCalcOnly) dwm.MoveWindow(GetDlgItem(fc.nIDLabel), rCtrl); // update YPos for the ctrl rCtrlDLU.OffsetRect(0, nCtrlHeightDLU); // move ctrl rCtrl = rCtrlDLU; dlu.ToPixels(rCtrl); if (!bCalcOnly) dwm.MoveWindow(GetDlgItem(fc.nIDCtrl), rCtrl); // update XPos for the control nXPosDLU = rCtrlDLU.right + CTRLXSPACING; } // show/hide and enable as appropriate if (!bCalcOnly) { BOOL bSelFilter = (m_filter.nShow == FS_SELECTED); BOOL bEnable = bWantCtrl; // special cases if (bEnable && fc.nIDCtrl != IDC_FILTERCOMBO) { if (bSelFilter && fc.nIDCtrl != IDC_OPTIONFILTERCOMBO) bEnable = FALSE; else if (m_bCustomFilter) bEnable = FALSE; } if (fc.nIDLabel) { GetDlgItem(fc.nIDLabel)->ShowWindow(bWantCtrl ? SW_SHOW : SW_HIDE); // note the first ctrl is always enabled even for custom filter GetDlgItem(fc.nIDLabel)->EnableWindow(bEnable); } GetDlgItem(fc.nIDCtrl)->ShowWindow(bWantCtrl ? SW_SHOW : SW_HIDE); GetDlgItem(fc.nIDCtrl)->EnableWindow(bEnable); } } // update bottom of filter bar nYPosDLU += (2 * nCtrlHeightDLU) + 2; return dlu.ToPixelsY(nYPosDLU); }