VOID PhpLayoutItemLayout( _Inout_ PPH_LAYOUT_MANAGER Manager, _Inout_ PPH_LAYOUT_ITEM Item ) { RECT rect; BOOLEAN hasDummyParent; if (Item->NumberOfChildren > 0 && !Item->DeferHandle) Item->DeferHandle = BeginDeferWindowPos(Item->NumberOfChildren); if (Item->LayoutNumber == Manager->LayoutNumber) return; // If this is the root item we must stop here. if (!Item->ParentItem) return; PhpLayoutItemLayout(Manager, Item->ParentItem); if (Item->ParentItem != Item->LayoutParentItem) { PhpLayoutItemLayout(Manager, Item->LayoutParentItem); hasDummyParent = TRUE; } else { hasDummyParent = FALSE; } GetWindowRect(Item->Handle, &Item->Rect); MapWindowPoints(NULL, Item->LayoutParentItem->Handle, (POINT *)&Item->Rect, 2); if (Item->Anchor & PH_LAYOUT_TAB_CONTROL) { // We want to convert the tab control rectangle to the tab page display rectangle. TabCtrl_AdjustRect(Item->Handle, FALSE, &Item->Rect); } if (!(Item->Anchor & PH_LAYOUT_DUMMY_MASK)) { // Convert right/bottom into margins to make the calculations // easier. rect = Item->Rect; PhConvertRect(&rect, &Item->LayoutParentItem->Rect); if (!(Item->Anchor & (PH_ANCHOR_LEFT | PH_ANCHOR_RIGHT))) { // TODO PhRaiseStatus(STATUS_NOT_IMPLEMENTED); } else if (Item->Anchor & PH_ANCHOR_RIGHT) { if (Item->Anchor & PH_ANCHOR_LEFT) { rect.left = (hasDummyParent ? Item->ParentItem->Rect.left : 0) + Item->Margin.left; rect.right = Item->Margin.right; } else { ULONG diff = Item->Margin.right - rect.right; rect.left -= diff; rect.right += diff; } } if (!(Item->Anchor & (PH_ANCHOR_TOP | PH_ANCHOR_BOTTOM))) { // TODO PhRaiseStatus(STATUS_NOT_IMPLEMENTED); } else if (Item->Anchor & PH_ANCHOR_BOTTOM) { if (Item->Anchor & PH_ANCHOR_TOP) { // tab control hack rect.top = (hasDummyParent ? Item->ParentItem->Rect.top : 0) + Item->Margin.top; rect.bottom = Item->Margin.bottom; } else { ULONG diff = Item->Margin.bottom - rect.bottom; rect.top -= diff; rect.bottom += diff; } } // Convert the right/bottom back into co-ordinates. PhConvertRect(&rect, &Item->LayoutParentItem->Rect); Item->Rect = rect; if (!(Item->Anchor & PH_LAYOUT_IMMEDIATE_RESIZE)) { Item->LayoutParentItem->DeferHandle = DeferWindowPos( Item->LayoutParentItem->DeferHandle, Item->Handle, NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOZORDER ); } else { // This is needed for tab controls, so that TabCtrl_AdjustRect will give us an up-to-date result. SetWindowPos( Item->Handle, NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOZORDER ); } } Item->LayoutNumber = Manager->LayoutNumber; }
void wxNotebook::OnSize(wxSizeEvent& event) { if ( GetPageCount() == 0 ) { // Prevents droppings on resize, but does cause some flicker // when there are no pages. Refresh(); event.Skip(); return; } #ifndef __WXWINCE__ else { // Without this, we can sometimes get droppings at the edges // of a notebook, for example a notebook in a splitter window. // This needs to be reconciled with the RefreshRect calls // at the end of this function, which weren't enough to prevent // the droppings. wxSize sz = GetClientSize(); // Refresh right side wxRect rect(sz.x-4, 0, 4, sz.y); RefreshRect(rect); // Refresh bottom side rect = wxRect(0, sz.y-4, sz.x, 4); RefreshRect(rect); // Refresh left side rect = wxRect(0, 0, 4, sz.y); RefreshRect(rect); } #endif // !__WXWINCE__ // fit all the notebook pages to the tab control's display area RECT rc; rc.left = rc.top = 0; GetSize((int *)&rc.right, (int *)&rc.bottom); // save the total size, we'll use it below int widthNbook = rc.right - rc.left, heightNbook = rc.bottom - rc.top; // there seems to be a bug in the implementation of TabCtrl_AdjustRect(): it // returns completely false values for multiline tab controls after the tabs // are added but before getting the first WM_SIZE (off by ~50 pixels, see // // http://sf.net/tracker/index.php?func=detail&aid=645323&group_id=9863&atid=109863 // // and the only work around I could find was this ugly hack... without it // simply toggling the "multiline" checkbox in the notebook sample resulted // in a noticeable page displacement if ( HasFlag(wxNB_MULTILINE) ) { // avoid an infinite recursion: we get another notification too! static bool s_isInOnSize = false; if ( !s_isInOnSize ) { s_isInOnSize = true; SendMessage(GetHwnd(), WM_SIZE, SIZE_RESTORED, MAKELPARAM(rc.right, rc.bottom)); s_isInOnSize = false; } // The best size depends on the number of rows of tabs, which can // change when the notepad is resized. InvalidateBestSize(); } #if wxUSE_UXTHEME // background bitmap size has changed, update the brush using it too UpdateBgBrush(); #endif // wxUSE_UXTHEME TabCtrl_AdjustRect(GetHwnd(), false, &rc); int width = rc.right - rc.left, height = rc.bottom - rc.top; size_t nCount = m_pages.Count(); for ( size_t nPage = 0; nPage < nCount; nPage++ ) { wxNotebookPage *pPage = m_pages[nPage]; pPage->SetSize(rc.left, rc.top, width, height); } // unless we had already repainted everything, we now need to refresh if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) ) { // invalidate areas not covered by pages RefreshRect(wxRect(0, 0, widthNbook, rc.top), false); RefreshRect(wxRect(0, rc.top, rc.left, height), false); RefreshRect(wxRect(0, rc.bottom, widthNbook, heightNbook - rc.bottom), false); RefreshRect(wxRect(rc.right, rc.top, widthNbook - rc.right, height), false); } #if USE_NOTEBOOK_ANTIFLICKER // subclass the spin control used by the notebook to scroll pages to // prevent it from flickering on resize if ( !m_hasSubclassedUpdown ) { // iterate over all child windows to find spin button for ( HWND child = ::GetWindow(GetHwnd(), GW_CHILD); child; child = ::GetWindow(child, GW_HWNDNEXT) ) { wxWindow *childWindow = wxFindWinFromHandle((WXHWND)child); // see if it exists, if no wxWindow found then assume it's the spin // btn if ( !childWindow ) { // subclass the spin button to override WM_ERASEBKGND if ( !gs_wndprocNotebookSpinBtn ) gs_wndprocNotebookSpinBtn = (WXFARPROC)wxGetWindowProc(child); wxSetWindowProc(child, wxNotebookSpinBtnWndProc); m_hasSubclassedUpdown = true; break; } } } // Probably because of the games we play above to avoid flicker sometimes // the text controls inside notebook pages are not shown correctly (they // don't have their borders) when the notebook is shown for the first time. // It's not really clear why does this happen and maybe the bug is in // wxTextCtrl itself and not here but updating the page when it's about to // be shown doesn't cost much and works around the problem so do it here // for now. if ( !m_doneUpdateHack && IsShownOnScreen() ) { m_doneUpdateHack = true; wxWindow* const page = GetCurrentPage(); if ( page ) page->Update(); } #endif // USE_NOTEBOOK_ANTIFLICKER event.Skip(); }
/*---------------------------------------------------------------------------------------------- Called by the framework to initialize the dialog. All one-time initialization should be done here (that is, all controls have been created and have valid hwnd's, but they need initial values.) See ${AfDialog#FWndProc} @param hwndCtrl (not used) @param lp (not used) @return true if Successful ----------------------------------------------------------------------------------------------*/ bool RnTlsOptDlg::OnInitDlg(HWND hwndCtrl, LPARAM lp) { m_qrmw = dynamic_cast<RecMainWnd *>(MainWindow()); AfMdiClientWndPtr qmdic = m_qrmw->GetMdiClientWnd(); AssertPtr(qmdic); // Cancel the dialog if we aren't allowed to make changes. AfClientRecWndPtr qafcrw = dynamic_cast<AfClientRecWnd *>(qmdic->GetCurChild()); // This might not exist yet if the filter doesn't match anything during startup. if (qafcrw && !qafcrw->IsOkToChange()) { SuperClass::OnCancel(); return true; } Assert(m_cTabs == 6); // Ensure that the number of dialogs is what we expect. m_hwndTab = GetDlgItem(m_hwnd, kcidTlsOptDlgTab); AfLpInfo * plpi = m_qrmw->GetLpInfo(); AssertPtr(plpi); // Setup m_vuvs plpi->GetDbInfo()->GetCopyUserViewSpecs(&m_vuvs); SetVuvsCopy(); AfViewBarShell * pvwbrs = m_qrmw->GetViewBarShell(); AssertPtr(pvwbrs); // CAUTION! The order these are inserted is important since we use constant indexes to // access them (e.g., kidlgGeneral). AfDialogViewPtr qadv; qadv.Attach(NewObj TlsOptDlgCst(this)); m_vdlgv.Push(qadv); qadv.Attach(NewObj TlsOptDlgVw(this)); m_vdlgv.Push(qadv); qadv.Attach(NewObj FwFilterDlg(this)); m_vdlgv.Push(qadv); qadv.Attach(NewObj TlsOptDlgSort(this)); m_vdlgv.Push(qadv); qadv.Attach(NewObj TlsOptDlgOvr(this)); m_vdlgv.Push(qadv); qadv.Attach(NewObj TlsOptDlgGen(this)); m_vdlgv.Push(qadv); // Initialize the object classes that we can create in this dialog. TlsObject to; to.m_clsid = kclidRnEvent; to.m_nLevel = 0; to.m_strName.Load(kstidEventEntry); m_vto.Push(to); to.m_clsid = kclidRnAnalysis; to.m_nLevel = 0; to.m_strName.Load(kstidAnalEntry); m_vto.Push(to); // Initialize the Custom Define In vector. to.m_clsid = kclidRnEvent; to.m_nLevel = 0; to.m_strName.Load(kstidEventEntry); to.m_strClsName = "RnEvent"; m_vcdi.Push(to); to.m_clsid = kclidRnAnalysis; to.m_nLevel = 0; to.m_strName.Load(kstidAnalEntry); to.m_strClsName = "RnAnalysis"; m_vcdi.Push(to); to.m_clsid = kclidRnGenericRec; to.m_nLevel = 1000; // Level 1000 means ALL Entries to.m_strName.Load(kstidTlsOptCstAllEnt); to.m_strClsName = "RnGenericRec"; m_vcdi.Push(to); m_iDefaultCstDfn = m_vcdi.Size() - 1; // If we don't get a reasonable values from GetCurClsLevel, we just default to 0 for the // index. m_ivto = 0; for (int ivto = 0; ivto < m_vto.Size(); ++ivto) { if (m_vto[ivto].m_clsid == m_tgv.clsid && m_vto[ivto].m_nLevel == m_tgv.nLevel) { m_ivto = ivto; break; } } // Initialize the master view types supported by this dialog. TlsView tv; tv.m_vwt = kvwtBrowse; tv.m_fMaster = false; m_vtv.Push(tv); tv.m_vwt = kvwtDE; tv.m_fMaster = true; m_vtv.Push(tv); tv.m_vwt = kvwtDoc; tv.m_fMaster = false; m_vtv.Push(tv); // Update the General tab. TlsOptDlgGen * ptodg = dynamic_cast<TlsOptDlgGen *>(m_vdlgv[kidlgGeneral].Ptr()); AssertPtr(ptodg); ptodg->SetDialogValues(m_vuvs, &m_siwndClientDel); // Update the Custom Fields tab. TlsOptDlgCst * ptodc = dynamic_cast<TlsOptDlgCst *>(m_vdlgv[kidlgCustom].Ptr()); AssertPtr(ptodc); ptodc->SetDialogValues(m_vuvs, &m_siwndClientDel, &m_siCustFldDel); int iv1; // Update the Views tab. TlsOptDlgVw * ptodv = dynamic_cast<TlsOptDlgVw *>(m_vdlgv[kidlgViews].Ptr()); AssertPtr(ptodv); if (m_tgv.itabInitial == kidlgViews && m_tgv.iv1 >= 0) { iv1 = m_tgv.iv1; } else { // Use the current view that is selected. Set<int> sisel; pvwbrs->GetSelection(m_qrmw->GetViewbarListIndex(kvbltView), sisel); if (sisel.Size()) iv1 = *sisel.Begin(); else { iv1 = -1; Assert(!qafcrw); } } if (iv1 >= 0) ptodv->SetDialogValues(m_vuvs, &m_siwndClientDel, iv1); // Update the Filters tab. FwFilterDlg * pfltdlg = dynamic_cast<FwFilterDlg *>(m_vdlgv[kidlgFilters].Ptr()); AssertPtr(pfltdlg); if (m_tgv.itabInitial == kidlgFilters && m_tgv.iv1 >= 0) { iv1 = m_tgv.iv1; } else { // Use the current filter that is selected. Set<int> sisel; pvwbrs->GetSelection(m_qrmw->GetViewbarListIndex(kvbltFilter), sisel); if (sisel.Size()) iv1 = *sisel.Begin() - 1; // Subtract one for the No Filter item. else { iv1 = -1; Assert(!qafcrw); } } pfltdlg->SetDialogValues(m_qrmw, Max(0, iv1)); // Update the Sort Methods tab. TlsOptDlgSort * psrtdlg = dynamic_cast<TlsOptDlgSort *>(m_vdlgv[kidlgSortMethods].Ptr()); AssertPtr(psrtdlg); if (m_tgv.itabInitial == kidlgSortMethods && m_tgv.iv1 >= 0) { iv1 = m_tgv.iv1; } else { // Use the current sort method that is selected. Set<int> sisel; pvwbrs->GetSelection(m_qrmw->GetViewbarListIndex(kvbltSort), sisel); if (sisel.Size()) iv1 = *sisel.Begin() - 1; // Subtract one for the No sort item. else { iv1 = -1; Assert(!qafcrw); } } psrtdlg->SetDialogValues(m_qrmw, Max(0, iv1)); // Update the Overlays tab. TlsOptDlgOvr * ptodo = dynamic_cast<TlsOptDlgOvr *>(m_vdlgv[kidlgOverlays].Ptr()); AssertPtr(ptodo); if (m_tgv.itabInitial == kidlgOverlays && m_tgv.iv1 >= 0) { iv1 = m_tgv.iv1; } else { // Use the first overlay that is selected. Set<int> sisel; pvwbrs->GetSelection(m_qrmw->GetViewbarListIndex(kvbltOverlay), sisel); if (sisel.Size()) iv1 = *sisel.Begin() - 1; // Subtract one for the No Overlay item. else { iv1 = -1; Assert(!qafcrw); } } ptodo->SetDialogValues(plpi, Max(0, iv1), (m_tgv.itabInitial == kidlgOverlays && m_tgv.iv2 >= 0) ? m_tgv.iv2 : 0); // WARNING: If this ever gets changed to anything but a fixed length buffer, make sure // ti.pszText is set after loading each string, since the memory pointed to by strb // could be different each time. StrAppBuf strb; TCITEM ti; ti.mask = TCIF_TEXT; ti.pszText = const_cast<achar *>(strb.Chars()); // Add a tab to the tab control for each dialog view. strb.Load(kstidTlsOptCust); TabCtrl_InsertItem(m_hwndTab, kidlgCustom, &ti); strb.Load(kstidTlsOptView); TabCtrl_InsertItem(m_hwndTab, kidlgViews, &ti); strb.Load(kstidTlsOptFltr); TabCtrl_InsertItem(m_hwndTab, kidlgFilters, &ti); strb.Load(kstidTlsOptSort); TabCtrl_InsertItem(m_hwndTab, kidlgSortMethods, &ti); strb.Load(kstidTlsOptOvr); TabCtrl_InsertItem(m_hwndTab, kidlgOverlays, &ti); strb.Load(kstidTlsOptGen); TabCtrl_InsertItem(m_hwndTab, kidlgGeneral, &ti); // This section must be after at least one tab gets added to the tab control. RECT rcTab; ::GetWindowRect(m_hwndTab, &rcTab); TabCtrl_AdjustRect(m_hwndTab, false, &rcTab); POINT pt = { rcTab.left, rcTab.top }; ::ScreenToClient(m_hwnd, &pt); m_dxsClient = pt.x; m_dysClient = pt.y; // Subclass the Help button. AfButtonPtr qbtn; qbtn.Create(); qbtn->SubclassButton(m_hwnd, kctidHelp, kbtHelp, NULL, 0); ShowChildDlg(m_tgv.itabInitial); m_siwndClientDel.Clear(); m_siCustFldDel.Clear(); AfApp::Papp()->EnableMainWindows(false); SetFocus(::GetDlgItem(m_hwnd, kcidTlsOptDlgTab)); return SuperClass::OnInitDlg(hwndCtrl, lp); }
static INT_PTR CALLBACK DlgProfileManager(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { DetailsData *dat = (DetailsData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { DlgProfData *prof = (struct DlgProfData*)lParam; PROPSHEETHEADER *psh = prof->psh; SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadImage(hInst, MAKEINTRESOURCE(IDI_DETAILSLOGO), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0)); SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadImage(hInst, MAKEINTRESOURCE(IDI_DETAILSLOGO), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0)); dat = (DetailsData*)mir_alloc(sizeof(DetailsData)); dat->prof = prof; prof->hwndOK = GetDlgItem(hwndDlg, IDOK); prof->hwndSM = GetDlgItem(hwndDlg, IDC_SM_COMBO); EnableWindow(prof->hwndOK, FALSE); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); TCHAR buf[512]; mir_sntprintf(buf, SIZEOF(buf), _T("%s\n%s"), TranslateT("Miranda NG profile manager"), TranslateT("Manage your Miranda NG profile")); SetDlgItemText(hwndDlg, IDC_NAME, buf); dat->currentPage = 0; dat->pageCount = psh->nPages; dat->opd = (DetailsPageData*)mir_calloc(sizeof(DetailsPageData)*dat->pageCount); OPTIONSDIALOGPAGE *odp = (OPTIONSDIALOGPAGE*)psh->ppsp; TCITEM tci; tci.mask = TCIF_TEXT; for (int i = 0; i < dat->pageCount; i++) { dat->opd[i].pTemplate = (DLGTEMPLATE *)LockResource(LoadResource(odp[i].hInstance, FindResourceA(odp[i].hInstance, odp[i].pszTemplate, MAKEINTRESOURCEA(5)))); dat->opd[i].dlgProc = odp[i].pfnDlgProc; dat->opd[i].hInst = odp[i].hInstance; dat->opd[i].hwnd = NULL; dat->opd[i].changed = 0; tci.pszText = (TCHAR*)odp[i].ptszTitle; if (dat->prof->pd->noProfiles || shouldAutoCreate(dat->prof->pd->szProfile)) dat->currentPage = 1; TabCtrl_InsertItem(GetDlgItem(hwndDlg, IDC_TABS), i, &tci); } GetWindowRect(GetDlgItem(hwndDlg, IDC_TABS), &dat->rcDisplay); TabCtrl_AdjustRect(GetDlgItem(hwndDlg, IDC_TABS), FALSE, &dat->rcDisplay); POINT pt = { 0, 0 }; ClientToScreen(hwndDlg, &pt); OffsetRect(&dat->rcDisplay, -pt.x, -pt.y); TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TABS), dat->currentPage); dat->opd[dat->currentPage].hwnd = CreateDialogIndirectParam(dat->opd[dat->currentPage].hInst, dat->opd[dat->currentPage].pTemplate, hwndDlg, dat->opd[dat->currentPage].dlgProc, (LPARAM)dat->prof); ThemeDialogBackground(dat->opd[dat->currentPage].hwnd); SetWindowPos(dat->opd[dat->currentPage].hwnd, HWND_TOP, dat->rcDisplay.left, dat->rcDisplay.top, 0, 0, SWP_NOSIZE); PSHNOTIFY pshn; pshn.hdr.code = PSN_INFOCHANGED; pshn.hdr.hwndFrom = dat->opd[dat->currentPage].hwnd; pshn.hdr.idFrom = 0; pshn.lParam = 0; SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); // service mode combobox if (servicePlugins.getCount() == 0) { ShowWindow(GetDlgItem(hwndDlg, IDC_SM_LABEL), FALSE); ShowWindow(GetDlgItem(hwndDlg, IDC_SM_COMBO), FALSE); } else { HWND hwndCombo = GetDlgItem(hwndDlg, IDC_SM_COMBO); LRESULT index = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)_T("")); SendMessage(hwndCombo, CB_SETITEMDATA, index, (LPARAM)-1); SendMessage(hwndCombo, CB_SETCURSEL, 0, 0); for (int i = 0; i < servicePlugins.getCount(); i++) { pluginEntry *p = servicePlugins[i]; index = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)TranslateTS(p->pluginname)); SendMessage(hwndCombo, CB_SETITEMDATA, index, (LPARAM)i); } } ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOW); } return TRUE; case WM_CTLCOLORSTATIC: switch (GetDlgCtrlID((HWND)lParam)) { case IDC_WHITERECT: SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); } break; case PSM_CHANGED: dat->opd[dat->currentPage].changed = 1; return TRUE; case PSM_FORCECHANGED: { PSHNOTIFY pshn; pshn.hdr.code = PSN_INFOCHANGED; pshn.hdr.idFrom = 0; pshn.lParam = 0; for (int i = 0; i < dat->pageCount; i++) { pshn.hdr.hwndFrom = dat->opd[i].hwnd; if (dat->opd[i].hwnd != NULL) SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); } } break; case WM_NOTIFY: switch (wParam) { case IDC_TABS: switch (((LPNMHDR)lParam)->code) { case TCN_SELCHANGING: if (dat->currentPage != -1 && dat->opd[dat->currentPage].hwnd != NULL) { PSHNOTIFY pshn; pshn.hdr.code = PSN_KILLACTIVE; pshn.hdr.hwndFrom = dat->opd[dat->currentPage].hwnd; pshn.hdr.idFrom = 0; pshn.lParam = 0; if (SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn)) { SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); return TRUE; } } break; case TCN_SELCHANGE: if (dat->currentPage != -1 && dat->opd[dat->currentPage].hwnd != NULL) ShowWindow(dat->opd[dat->currentPage].hwnd, SW_HIDE); dat->currentPage = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TABS)); if (dat->currentPage != -1) { if (dat->opd[dat->currentPage].hwnd == NULL) { PSHNOTIFY pshn; dat->opd[dat->currentPage].hwnd = CreateDialogIndirectParam(dat->opd[dat->currentPage].hInst, dat->opd[dat->currentPage].pTemplate, hwndDlg, dat->opd[dat->currentPage].dlgProc, (LPARAM)dat->prof); ThemeDialogBackground(dat->opd[dat->currentPage].hwnd); SetWindowPos(dat->opd[dat->currentPage].hwnd, HWND_TOP, dat->rcDisplay.left, dat->rcDisplay.top, 0, 0, SWP_NOSIZE); pshn.hdr.code = PSN_INFOCHANGED; pshn.hdr.hwndFrom = dat->opd[dat->currentPage].hwnd; pshn.hdr.idFrom = 0; pshn.lParam = 0; SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); } ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOW); } break; } break; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: { PSHNOTIFY pshn; pshn.hdr.idFrom = 0; pshn.lParam = 0; pshn.hdr.code = PSN_RESET; for (int i = 0; i < dat->pageCount; i++) { if (dat->opd[i].hwnd == NULL || !dat->opd[i].changed) continue; pshn.hdr.hwndFrom = dat->opd[i].hwnd; SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); } EndDialog(hwndDlg, 0); } break; case IDC_REMOVE: if (!dat->prof->pd->noProfiles) { HWND hwndList = GetDlgItem(dat->opd[0].hwnd, IDC_PROFILELIST); DeleteProfile(hwndList, ListView_GetNextItem(hwndList, -1, LVNI_SELECTED | LVNI_ALL), dat->prof); } break; case IDOK: PSHNOTIFY pshn; pshn.hdr.idFrom = 0; pshn.lParam = 0; if (dat->currentPage != -1) { pshn.hdr.code = PSN_KILLACTIVE; pshn.hdr.hwndFrom = dat->opd[dat->currentPage].hwnd; if (SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn)) break; } pshn.hdr.code = PSN_APPLY; for (int i = 0; i < dat->pageCount; i++) { if (dat->opd[i].hwnd == NULL || !dat->opd[i].changed) continue; pshn.hdr.hwndFrom = dat->opd[i].hwnd; SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); if (GetWindowLongPtr(dat->opd[i].hwnd, DWLP_MSGRESULT) == PSNRET_INVALID_NOCHANGEPAGE) { TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TABS), i); if (dat->currentPage != -1) ShowWindow(dat->opd[dat->currentPage].hwnd, SW_HIDE); dat->currentPage = i; ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOW); return 0; } } EndDialog(hwndDlg, 1); } break; case WM_DESTROY: if (dat->currentPage != 1) { LRESULT curSel = SendDlgItemMessage(hwndDlg, IDC_SM_COMBO, CB_GETCURSEL, 0, 0); if (curSel != CB_ERR) { int idx = SendDlgItemMessage(hwndDlg, IDC_SM_COMBO, CB_GETITEMDATA, (WPARAM)curSel, 0); SetServiceModePlugin(servicePlugins[idx]); } } DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, 0)); DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_BIG, 0)); DeleteObject(dat->hBoldFont); for (int i = 0; i < dat->pageCount; i++) if (dat->opd[i].hwnd != NULL) DestroyWindow(dat->opd[i].hwnd); mir_free(dat->opd); mir_free(dat); break; } return FALSE; }
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { // We use the dialog-box's USERDATA to store a _this pointer // This is set only once WM_INITDIALOG has been recieved, though! // VNCOptions *_this = (VNCOptions *) GetWindowLong(hwndDlg, GWL_USERDATA); switch (uMsg) { case WM_INITDIALOG: { InitCommonControls(); m_hParent = hwndDlg; m_hTab = GetDlgItem(hwndDlg, IDC_TAB); TCITEM item; item.mask = TCIF_TEXT; item.pszText="Network"; TabCtrl_InsertItem(m_hTab, 0, &item); item.pszText = "Security"; TabCtrl_InsertItem(m_hTab, 1, &item); item.pszText = "Input/FileTransfer"; TabCtrl_InsertItem(m_hTab, 2, &item); item.pszText = "Connections"; TabCtrl_InsertItem(m_hTab, 3, &item); item.pszText = "Screen Capture"; TabCtrl_InsertItem(m_hTab, 4, &item); item.pszText = "Misc/logging"; //TabCtrl_InsertItem(m_hTab, 5, &item); //item.pszText = "Create SFX"; TabCtrl_InsertItem(m_hTab, 6, &item); item.pszText = "Trouble Shooting"; hTab0dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION1), hwndDlg, (DLGPROC)DlgProcOptions1, NULL); hTab1dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION2), hwndDlg, (DLGPROC)security, NULL); hTab2dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION3), hwndDlg, (DLGPROC)DlgProcOFT, NULL); hTab3dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION4), hwndDlg, (DLGPROC)DlgProcCON, NULL); hTab4dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION5), hwndDlg, (DLGPROC)DlgProcCAP, NULL); hTab5dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION7), hwndDlg, (DLGPROC)DlgProcMISC, NULL); hTab6dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION8), hwndDlg, (DLGPROC)DlgProcSFX, NULL); hTab7dialog = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_OPTION9), hwndDlg, (DLGPROC)DlgProcSFX2, NULL); // Position child dialogs, to fit the Tab control's display area RECT rc; GetWindowRect(m_hTab, &rc); MapWindowPoints(NULL, hwndDlg, (POINT *)&rc, 2); TabCtrl_AdjustRect(m_hTab, FALSE, &rc); SetWindowPos(hTab0dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW); SetWindowPos(hTab1dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab2dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab3dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab4dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab5dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab6dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); SetWindowPos(hTab7dialog, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_HIDEWINDOW); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: ///SetFocus(GetDlgItem(hwndDlg, IDOK)); SendMessage(hTab0dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab1dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab2dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab3dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab4dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab5dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab6dialog, WM_COMMAND, IDOK, 0); SendMessage(hTab7dialog, WM_COMMAND, IDOK, 0); //SendMessage(_this->m_hPageGeneral, WM_COMMAND, IDC_OK, 0); DestroyWindow(hTab0dialog); DestroyWindow(hTab1dialog); DestroyWindow(hTab2dialog); DestroyWindow(hTab3dialog); DestroyWindow(hTab4dialog); DestroyWindow(hTab5dialog); DestroyWindow(hTab6dialog); DestroyWindow(hTab7dialog); Save_settings(); EndDialog(hwndDlg, TRUE); return TRUE; case IDCANCEL: SendMessage(hTab0dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab1dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab2dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab3dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab4dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab5dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab6dialog, WM_COMMAND, IDCANCEL, 0); SendMessage(hTab7dialog, WM_COMMAND, IDCANCEL, 0); DestroyWindow(hTab0dialog); DestroyWindow(hTab1dialog); DestroyWindow(hTab2dialog); DestroyWindow(hTab3dialog); DestroyWindow(hTab4dialog); DestroyWindow(hTab5dialog); DestroyWindow(hTab6dialog); DestroyWindow(hTab7dialog); EndDialog(hwndDlg, FALSE); return TRUE; } return FALSE; case WM_NOTIFY: { LPNMHDR pn = (LPNMHDR)lParam; switch (pn->code) { case TCN_SELCHANGE: switch (pn->idFrom) { case IDC_TAB: int i = TabCtrl_GetCurFocus(m_hTab); switch (i) { case 0: ShowWindow(hTab0dialog, SW_SHOW); SetFocus(hTab0dialog); return 0; case 1: ShowWindow(hTab1dialog, SW_SHOW); SetFocus(hTab1dialog); return 0; case 2: ShowWindow(hTab2dialog, SW_SHOW); SetFocus(hTab2dialog); return 0; case 3: ShowWindow(hTab3dialog, SW_SHOW); SetFocus(hTab3dialog); return 0; case 4: ShowWindow(hTab4dialog, SW_SHOW); SetFocus(hTab4dialog); return 0; case 5: ShowWindow(hTab5dialog, SW_SHOW); SetFocus(hTab5dialog); return 0; case 6: ShowWindow(hTab6dialog, SW_SHOW); SetFocus(hTab6dialog); return 0; } return 0; } return 0; case TCN_SELCHANGING: switch (pn->idFrom) { case IDC_TAB: int i = TabCtrl_GetCurFocus(m_hTab); switch (i) { case 0: ShowWindow(hTab0dialog, SW_HIDE); break; case 1: ShowWindow(hTab1dialog, SW_HIDE); break; case 2: ShowWindow(hTab2dialog, SW_HIDE); break; case 3: ShowWindow(hTab3dialog, SW_HIDE); break; case 4: ShowWindow(hTab4dialog, SW_HIDE); break; case 5: ShowWindow(hTab5dialog, SW_HIDE); break; case 6: ShowWindow(hTab6dialog, SW_HIDE); ShowWindow(hTab7dialog, SW_HIDE); break; } return 0; } return 0; } return 0; } } return 0; }
LRESULT CALLBACK ClientWndProc (HWND hwnd, UINT mMsg, WPARAM wParam, LPARAM lParam) { RECT rect; switch (mMsg) { case WM_CREATE : poppad_ini( hwnd,lParam ); return 0 ; case WM_DESTROY : //DeleteObject (hbr) ; DestroyMenu(hMenu) ; poppad_bye(); return 0 ; case WM_INITMENUPOPUP : return poppad_menupop( (WPARAM)hSubMenu, -1 ); // case WM_CTLCOLOREDIT : // { // DefWindowProc (hwnd, mMsg, wParam, lParam) ; // SetBkColor ((HDC) wParam, crBack) ; // //SetBkMode ((HDC) wParam, TRANSPARENT) ; // SetTextColor( (HDC) wParam, crText ); // return (LRESULT) (HBRUSH) hbr ; // } case WM_SETFOCUS : // hwndNotify = GetWindow (hwnd, GW_CHILD) ; // SetFocus (hwndNotify) ; Footy2SetFocus(activeFootyID, 0); return 0 ; case WM_SIZE : { // hwndNotify = GetWindow (hwnd, GW_CHILD) ; int cx = LOWORD (lParam) ; int cy = HIWORD (lParam) ; // Ignore if notification window is absent. // if (hwndNotify != NULL) // { // MoveWindow (hwndNotify, 0, 0, cx, cy, TRUE) ; // } MoveWindow(hwndTab, 0, 0, cx, cy, TRUE); GetClientRect(hwndTab, &rect); TabCtrl_AdjustRect(hwndTab, FALSE, &rect); Footy2Move(activeFootyID, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top); poppad_setsb_current(activeFootyID); return 0 ; } case WM_NOTIFY: switch (((NMHDR *)lParam)->code){ case TCN_SELCHANGE: { int presID = activeID, newID = TabCtrl_GetCurSel(hwndTab); ActivateTab(presID, newID); ChangeZOrder(presID, newID); return 0; } case NM_RCLICK: POINT pt, cpt; int i; GetCursorPos(&pt); cpt = pt; ScreenToClient(hwndTab, &cpt); for(i = 0; TabCtrl_GetItemCount(hwndTab); i++){ TabCtrl_GetItemRect(hwndTab, i, &rect); if(rect.left <= cpt.x && cpt.x <= rect.right && rect.top <= cpt.y && cpt.y <= rect.bottom){ TrackPopupMenu(hSubMenu2, TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwndClient, NULL); ClickID = i; break; } } return 0; } return 0; default : return (EditProc (hwnd, mMsg, wParam, lParam)) ; //return (DefWindowProc (hwnd, mMsg, wParam, lParam)) ; } }
BOOL CALLBACK ConfDialogBoxProc( HWND hWnd, UINT wmes, UINT wparam, LONG lparam ) { int i; switch( wmes ){ case WM_INITDIALOG: CreateMyProp(hWnd); GetClientRect(hWnd, &rect); SendMessage(hWnd, WM_SIZE, 0, MAKELPARAM(rect.right, rect.bottom-40)); break; case WM_SIZE: GetClientRect(hWnd, &rect); rect.bottom -= 40; TabCtrl_AdjustRect(hTabWnd, FALSE, &rect); MoveWindow(hTabWnd, 0, 0, LOWORD(lparam), HIWORD(lparam), TRUE); for(i=0;i<4;i++){ MoveWindow(hPage[i], rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); } break; case WM_NOTIFY: switch(TabCtrl_GetCurSel(((NMHDR *)lparam)->hwndFrom)) { case 0: ShowWindow(hPage[0], SW_SHOW); ShowWindow(hPage[1], SW_HIDE); ShowWindow(hPage[2], SW_HIDE); break; case 1: ShowWindow(hPage[1], SW_SHOW); ShowWindow(hPage[0], SW_HIDE); ShowWindow(hPage[2], SW_HIDE); break; case 2: ShowWindow(hPage[2], SW_SHOW); ShowWindow(hPage[0], SW_HIDE); ShowWindow(hPage[1], SW_HIDE); break; } break; case WM_COMMAND: switch( LOWORD( wparam ) ){ case IDC_CFGUPDATE: UpdateMyPop(hWnd); break; case IDOK: UpdateMyPop(hWnd); EndDialog( hWnd, IDOK ); break; case IDCANCEL: EndDialog( hWnd, IDCANCEL); break; } break; case WM_CLOSE: EndDialog( hWnd, TRUE ); break; } return 0; } // ConfDialogBoxProc
BOOL CALLBACK Machines_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (Display_HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewMch)) return FALSE; switch (msg) { case WM_INITDIALOG: { RECT rTab; GetClientRect (GetParent(hDlg), &rTab); TabCtrl_AdjustRect (GetParent (hDlg), FALSE, &rTab); ResizeWindow (hDlg, awdMachinesTab, rwaMoveToHere, &rTab); HIMAGELIST hSmall = AfsAppLib_CreateImageList (FALSE); HIMAGELIST hLarge = AfsAppLib_CreateImageList (TRUE); FastList_SetImageLists (GetDlgItem (hDlg, IDC_MACHINES_LIST), hSmall, hLarge); FastList_SetSortFunction (GetDlgItem (hDlg, IDC_MACHINES_LIST), General_ListSortFunction); FL_RestoreView (GetDlgItem (hDlg, IDC_MACHINES_LIST), &gr.viewMch); FastList_SetTextCallback (GetDlgItem (hDlg, IDC_MACHINES_LIST), Display_GetItemText, &gr.viewMch); SetDlgItemText (hDlg, IDC_MACHINES_PATTERN, g.szPatternMachines); Machines_EnableButtons(hDlg); Display_PopulateMachineList(); l.dwTickLastType = 0; } break; case WM_HELP: WinHelp (hDlg, cszHELPFILENAME, HELP_FINDER, 0); break; case WM_DESTROY: FL_StoreView (GetDlgItem (hDlg, IDC_MACHINES_LIST), &gr.viewMch); break; case WM_SIZE: // if (lp==0), we're minimizing--don't call ResizeWindow(). // if (lp != 0) ResizeWindow (hDlg, awdMachinesTab, rwaFixupGuts); break; case WM_TIMER: switch (wp) { case ID_SEARCH_TIMER: if ( (l.dwTickLastType) && (GetTickCount() > l.dwTickLastType + msecSEARCH_TIMER) ) { KillTimer (hDlg, ID_SEARCH_TIMER); Display_PopulateMachineList(); } break; } break; case WM_CONTEXTMENU: POINT ptScreen; ptScreen.x = LOWORD(lp); ptScreen.y = HIWORD(lp); OnRightClick (pmMACHINE, GetDlgItem (hDlg, IDC_MACHINES_LIST), &ptScreen); break; case WM_COMMAND: switch (LOWORD(wp)) { case IDC_MACHINES_PATTERN: if (HIWORD(wp) == EN_UPDATE) { l.dwTickLastType = GetTickCount(); KillTimer (hDlg, ID_SEARCH_TIMER); SetTimer (hDlg, ID_SEARCH_TIMER, msecSEARCH_TIMER +15, NULL); } break; default: OnContextCommand (LOWORD(wp)); break; } break; case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case FLN_ITEMSELECT: Main_SetMenus(); Machines_EnableButtons(hDlg); break; case FLN_LDBLCLICK: PostMessage (hDlg, WM_COMMAND, MAKELONG(M_PROPERTIES,BN_CLICKED), (LPARAM)GetDlgItem (hDlg, M_PROPERTIES)); break; } break; } return FALSE; }
BOOL CALLBACK Aggregates_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewAgg)) return FALSE; switch (msg) { case WM_INITDIALOG: { RECT rTab; GetClientRect (GetParent(hDlg), &rTab); TabCtrl_AdjustRect (GetParent (hDlg), FALSE, &rTab); ResizeWindow (hDlg, awdAggregates, rwaMoveToHere, &rTab); FL_RestoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAgg); FastList_SetTextCallback (GetDlgItem (hDlg, IDC_AGG_LIST), GetItemText, &gr.viewAgg); Aggregates_SubclassList (hDlg); } break; case WM_HELP: WinHelp (hDlg, cszHELPFILENAME, HELP_FINDER, 0); break; case WM_DESTROY: DontNotifyMeEver (hDlg); FL_StoreView (GetDlgItem (hDlg, IDC_AGG_LIST), &gr.viewAgg); break; case WM_SIZE: // if (lp==0), we're minimizing--don't call ResizeWindow(). // if (lp != 0) ResizeWindow (hDlg, awdAggregates, rwaFixupGuts); break; case WM_SERVER_CHANGED: { LPIDENT lpiServer = Server_GetServerForChild (hDlg); DontNotifyMeEver (hDlg); NotifyMe (WHEN_AGGS_CHANGE, lpiServer, hDlg, 0); // Fix the text at the top of the Aggregates tab: // TCHAR szName[ cchRESOURCE ]; LPTSTR pszText; if (lpiServer != NULL) { LPSERVER_PREF lpsp = (LPSERVER_PREF)lpiServer->GetUserParam(); lpiServer->GetServerName (szName); if (lpsp && !lpsp->fIsMonitored) pszText = FormatString (IDS_AGGREGATE_UNMON, TEXT("%s"), szName); else pszText = FormatString (IDS_AGGREGATES_IN_SERVER, TEXT("%s"), szName); } else if (g.lpiCell != NULL) { g.lpiCell->GetCellName (szName); if (g.sub) pszText = FormatString (IDS_AGGREGATE_SOME, TEXT("%s"), szName); else pszText = FormatString (IDS_AGGREGATES_IN_CELL, TEXT("%s"), szName); } else { pszText = FormatString (IDS_AGGREGATES_IN_NOTHING); } SetDlgItemText (hDlg, IDC_AGG_DESC, pszText); FreeString (pszText); UpdateDisplay_Aggregates (FALSE, GetDlgItem (hDlg, IDC_AGG_LIST), NULL, 0, NULL, NULL, NULL); } break; case WM_NOTIFY_FROM_DISPATCH: Aggregates_OnNotifyFromDispatch ((LPNOTIFYSTRUCT)lp); Delete ((LPNOTIFYSTRUCT)lp); break; case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case FLN_LDBLCLICK: if (((LPNMHDR)lp)->hwndFrom == GetDlgItem (hDlg, IDC_AGG_LIST)) { if (FL_GetSelectedData (GetDlgItem (hDlg, IDC_AGG_LIST))) PostMessage (GetDlgItem (hDlg, IDC_AGG_LIST), WM_COMMAND, M_PROPERTIES, 0); return TRUE; } break; } break; case WM_CONTEXTMENU: { POINT ptScreen; POINT ptClient; ptScreen.x = LOWORD(lp); ptScreen.y = HIWORD(lp); ptClient = ptScreen; ScreenToClient ((HWND)wp, &ptClient); if ((HWND)wp == GetDlgItem (hDlg, IDC_AGG_LIST)) Aggregates_ShowPopupMenu ((HWND)wp, ptClient, ptScreen); } break; case WM_COMMAND: switch (LOWORD(wp)) { case IDC_AGG_CREATESET: SendMessage (GetDlgItem (hDlg, IDC_AGG_LIST), WM_COMMAND, M_SET_CREATE, 0); break; } break; } return FALSE; }
void AddSearchTabs(HWND hwnd) { TCITEM tcitem; RECT rect; int i; HWND hwndTab = GetDlgItem(hwnd, IDC_TAB1); tcitem.mask = TCIF_TEXT; tcitem.pszText = _T("Find"); TabCtrl_InsertItem(hwndTab, 0, &tcitem); tcitem.mask = TCIF_TEXT; tcitem.pszText = _T("Replace"); TabCtrl_InsertItem(hwndTab, 1, &tcitem); tcitem.mask = TCIF_TEXT; tcitem.pszText = _T("Goto"); TabCtrl_InsertItem(hwndTab, 2, &tcitem); ///tcitem.mask = TCIF_TEXT; ///tcitem.pszText = _T("Replace"); //TabCtrl_InsertItem(hwndTab, 3, &tcitem); // GetClient // TabCtrl_GetItemRect(hwndTab, 0, &rect); //for(i = MAX_FIND_PANES-1; i >= 0; i--) //{ g_hwndFindPane[0] = CreateDialog(g_hResourceModule, MAKEINTRESOURCE(IDD_FINDPANE), hwnd, FindHexDlg); g_hwndFindPane[1] = CreateDialog(g_hResourceModule, MAKEINTRESOURCE(IDD_REPLACEPANE), hwnd, FindHexDlg); g_hwndFindPane[2] = CreateDialog(g_hResourceModule, MAKEINTRESOURCE(IDD_GOTOPANE), hwnd, FindHexDlg); //ShowWindow(g_hwndFindPane[0], SW_SHOW); //} // work out how big tab control needs to be to hold the pane //for(i = 0; i < MAX_FIND_PANES; i++) i = 0; { GetClientRect(g_hwndFindPane[i], &rect); MapWindowPoints(g_hwndFindPane[i], hwnd, (POINT *)&rect, 2); TabCtrl_AdjustRect(hwndTab, TRUE, &rect); // break; } // move tab control into position MoveWindow(hwndTab, FINDBORDER, FINDBORDER, rect.right-rect.left, rect.bottom-rect.top, FALSE); // adjust the find dialog size AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), FALSE, GetWindowLong(hwnd, GWL_EXSTYLE)); InflateRect(&rect, FINDBORDER, FINDBORDER); SetWindowPos(hwnd, 0, 0, 0, rect.right-rect.left, rect.bottom-rect.top-2, SWP_SIZEONLY); // now find out the tab control's client display area GetWindowRect(hwndTab, &rect); MapWindowPoints(0, hwnd, (POINT *)&rect, 2); TabCtrl_AdjustRect(hwndTab, FALSE, &rect); // move find pane into position for(i = 0; i < MAX_FIND_PANES; i++) { MoveWindow(g_hwndFindPane[i], rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, FALSE); } // ShowWindow(g_hwndFindPane[0], SW_SHOW); }
// Message handler for control box. LRESULT CALLBACK Controls(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: W32Util::CenterWindow(hDlg); { // IDC_EDIT_xxx is need continuous value to IDC_EDIT_KEY_ANALOG_RIGHT from IDC_EDIT_KEY_MENU. // it is total 16. // it is need the same order as the dinput_ctrl_map(and xinput/keyboard). if (CONTROLS_BUTTONS_COUNT != 16) { char mes[100]; snprintf(mes, 100, "CONTROLS_BUTTONS_COUNT(%d) is need 16.", CONTROLS_BUTTONS_COUNT); MessageBoxA(hDlg, mes, "Controls dialog init error.", MB_OK); } pCtrlDlgState = new ControlsDlgState(); ZeroMemory(pCtrlDlgState, sizeof(ControlsDlgState)); pCtrlDlgState->pCtrlMap = ControlMapping::CreateInstance(CONTROLS_BUTTONS_COUNT); if (!pCtrlDlgState->pCtrlMap) { MessageBoxA(hDlg, "Cannot Created ControlMapping instance.", "Controls dialog init error.", MB_OK); } pCtrlDlgState->pCtrlMap->SetTargetDevice(CONTROLS_KEYBOARD_INDEX); pCtrlDlgState->hCtrlTab = GetDlgItem(hDlg, IDC_TAB_INPUT_DEVICE); TCITEM tcItem; ZeroMemory(&tcItem, sizeof(tcItem)); tcItem.mask = TCIF_TEXT; tcItem.dwState = 0; tcItem.pszText = "Keyboard"; tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1; tcItem.iImage = 0; TabCtrl_InsertItem(pCtrlDlgState->hCtrlTab, TabCtrl_GetItemCount(pCtrlDlgState->hCtrlTab),&tcItem); tcItem.pszText = "DirectInput"; tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1; TabCtrl_InsertItem(pCtrlDlgState->hCtrlTab, TabCtrl_GetItemCount(pCtrlDlgState->hCtrlTab),&tcItem); tcItem.pszText = "XInput"; tcItem.cchTextMax = (int)strlen(tcItem.pszText)+1; TabCtrl_InsertItem(pCtrlDlgState->hCtrlTab, TabCtrl_GetItemCount(pCtrlDlgState->hCtrlTab),&tcItem); int tp_w = 0, tp_h = 0; // TODO: connect to keyboard device instead { HBITMAP hResBM = LoadImageFromResource(hInst, MAKEINTRESOURCE(IDB_IMAGE_PSP), "IMAGE"); pCtrlDlgState->hStaticPspImage = GetDlgItem(hDlg,IDC_STATIC_IMAGE_PSP); RECT clientRect, tabPageRect, imgRect; GetClientRect(hDlg, &clientRect); memcpy(&tabPageRect, &clientRect, sizeof(RECT)); TabCtrl_AdjustRect(pCtrlDlgState->hCtrlTab, FALSE, &tabPageRect); tp_w = tabPageRect.right - tabPageRect.left; tp_h = tabPageRect.bottom - tabPageRect.top; MoveWindow(pCtrlDlgState->hStaticPspImage, tabPageRect.left, tabPageRect.top, tp_w, tp_h, FALSE); HDC hDC = GetDC(pCtrlDlgState->hStaticPspImage); HBITMAP hMemBM = CreateCompatibleBitmap(hDC, tp_w, tp_h); HDC hResDC = CreateCompatibleDC(hDC); HDC hMemDC = CreateCompatibleDC(hDC); SelectObject(hResDC, hResBM); SelectObject(hMemDC, hMemBM); BITMAP bm; GetObject(hResBM, sizeof(BITMAP), &bm); SetStretchBltMode(hMemDC, HALFTONE); float scaleX = (float)bm.bmWidth / clientRect.right; float scaleY = (float)bm.bmHeight / clientRect.bottom; imgRect.left = (int)(tabPageRect.left * scaleX); imgRect.top = (int)(tabPageRect.top * scaleY); imgRect.right= (int)(bm.bmWidth - ((clientRect.right - tabPageRect.right) * scaleX)); imgRect.bottom = (int)(bm.bmHeight - ((clientRect.bottom - tabPageRect.bottom) * scaleY)); StretchBlt(hMemDC, 0, 0, tp_w, tp_h, hResDC, imgRect.left, imgRect.top, imgRect.right - imgRect.left, imgRect.bottom - imgRect.top, SRCCOPY); if (pCtrlDlgState->hbmPspImage) DeleteObject(pCtrlDlgState->hbmPspImage); pCtrlDlgState->hbmPspImage = hMemBM; DeleteDC(hMemDC); DeleteDC(hResDC); ReleaseDC(pCtrlDlgState->hStaticPspImage, hDC); DeleteObject(hResBM); } pCtrlDlgState->orgEditProc = (WNDPROC)GetWindowLongPtr( GetDlgItem(hDlg, CONTROLS_IDC_EDIT_BEGIN), GWLP_WNDPROC); for (int i = 0; i <= CONTROLS_IDC_EDIT_END - CONTROLS_IDC_EDIT_BEGIN; i++) { HWND hEdit = GetDlgItem(hDlg, CONTROLS_IDC_EDIT_BEGIN + i); if (i < CONTROLS_BUTTONS_COUNT) { u32 keyCode = pCtrlDlgState->pCtrlMap->GetBindCode(CONTROLS_KEYBOARD_INDEX, i); SetWindowTextForButton(hEdit, keyCode, getVirtualKeyName(keyCode)); } else { u32 analogCode = pCtrlDlgState->pCtrlMap->GetBindCode( CONTROLS_KEYBOARD_ANALOG_INDEX, i - CONTROLS_BUTTONS_COUNT); SetWindowTextForButton(hEdit, analogCode, getVirtualKeyName(analogCode)); } if (pCtrlDlgState->orgEditProc != (WNDPROC)GetWindowLongPtr(hEdit, GWLP_WNDPROC)) { MessageBoxA(hDlg, "Can not hook to the inherited Edit control. need wndproc of original edit control.", "Controls dialog init error.", MB_OK); break; } SetWindowLongPtr(hEdit, GWLP_WNDPROC, (LONG_PTR)ButtonsEditProc); } ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "None"); ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "XInput"); ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "DirectInput"); if ((g_Config.iForceInputDevice < 0) || (g_Config.iForceInputDevice > 1)) { ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), 0); } else { ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), (g_Config.iForceInputDevice + 1)); } pCtrlDlgState->orgPSPImageProc = (WNDPROC)GetWindowLongPtr(pCtrlDlgState->hStaticPspImage, GWLP_WNDPROC); SetWindowLongPtr(pCtrlDlgState->hStaticPspImage, GWLP_WNDPROC, (LONG_PTR)PSPImageProc); DWORD dwThreadID = GetWindowThreadProcessId(hDlg, NULL); pCtrlDlgState->pKeydownHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, dwThreadID); pCtrlDlgState->timerId = SetTimer(hDlg, TIMER_CONTROLS_BINDUPDATE, BINDUPDATE_INTERVAL_MS, 0); } return TRUE; case WM_TIMER: { if (wParam == TIMER_CONTROLS_BINDUPDATE && pCtrlDlgState->pCtrlMap->GetTargetDevice() != CONTROLS_KEYBOARD_INDEX) { HWND hEdit = GetFocus(); UINT nCtrlID = GetDlgCtrlID(hEdit); if (nCtrlID < CONTROLS_IDC_EDIT_BEGIN || nCtrlID > IDC_EDIT_KEYRIGHT) { break; } // device polling and update. int prevButton = pCtrlDlgState->pCtrlMap->GetBindCode(); pCtrlDlgState->pCtrlMap->UpdateState(); char str[CONTROLS_BUTTONNAME_MAX]; ZeroMemory(str, CONTROLS_BUTTONNAME_MAX * sizeof(char)); int buttonCode = pCtrlDlgState->pCtrlMap->GetBindCode(); if (buttonCode == -1 || prevButton == buttonCode) break; switch(pCtrlDlgState->pCtrlMap->GetTargetDevice()) { case CONTROLS_KEYBOARD_INDEX: { ; // leave it to KeyboardProc. } break; case CONTROLS_DIRECT_INPUT_INDEX: { if (buttonCode > 0xFF) { int n = 1; for (int i = buttonCode >> 8; i > 1; i >>= 1) { n++; } snprintf(str, CONTROLS_BUTTONNAME_MAX, "%s", controllist[(IDC_EDIT_KEYUP - CONTROLS_IDC_EDIT_BEGIN - 1) + n]); } else { snprintf(str, CONTROLS_BUTTONNAME_MAX, "%d", buttonCode + 1); } SetWindowTextA(hEdit, str); RECT rc = getRedrawRect(hEdit); InvalidateRect(hDlg, &rc, FALSE); } break; case CONTROLS_XINPUT_INDEX: { SetWindowTextA(hEdit, getXinputButtonName(buttonCode)); RECT rc = getRedrawRect(hEdit); InvalidateRect(hDlg, &rc, FALSE); } break; } }
static INT_PTR CALLBACK OptionsDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) { OptionsPageData *opd; OptionsDlgData *dat = (OptionsDlgData*)GetWindowLongPtr(hdlg, GWLP_USERDATA); HWND hwndTree = GetDlgItem(hdlg, IDC_PAGETREE); switch (message) { case WM_CTLCOLORSTATIC: switch (GetDlgCtrlID((HWND)lParam)) { case IDC_WHITERECT: case IDC_KEYWORD_FILTER: SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); } break; case WM_INITDIALOG: TranslateDialogDefault(hdlg); if (!ServiceExists(MS_MODERNOPT_SHOW)) ShowWindow(GetDlgItem(hdlg, IDC_MODERN), FALSE); dat = new OptionsDlgData; SetWindowLongPtr(hdlg, GWLP_USERDATA, (LONG_PTR)dat); Utils_RestoreWindowPositionNoSize(hdlg, NULL, "Options", ""); Window_SetIcon_IcoLib(hdlg, SKINICON_OTHER_OPTIONS); EnableWindow(GetDlgItem(hdlg, IDC_APPLY), FALSE); { COMBOBOXINFO cbi; cbi.cbSize = sizeof(COMBOBOXINFO); GetComboBoxInfo(GetDlgItem(hdlg, IDC_KEYWORD_FILTER), &cbi); mir_subclassWindow(cbi.hwndItem, OptionsFilterSubclassProc); if (IsAeroMode()) { mir_subclassWindow(cbi.hwndCombo, AeroPaintSubclassProc); mir_subclassWindow(cbi.hwndItem, AeroPaintSubclassProc); } PROPSHEETHEADER *psh = (PROPSHEETHEADER*)lParam; SetWindowText(hdlg, psh->pszCaption); LOGFONT lf; dat->hBoldFont = (HFONT)SendDlgItemMessage(hdlg, IDC_APPLY, WM_GETFONT, 0, 0); GetObject(dat->hBoldFont, sizeof(lf), &lf); lf.lfWeight = FW_BOLD; dat->hBoldFont = CreateFontIndirect(&lf); dat->hPluginLoad = HookEventMessage(ME_SYSTEM_MODULELOAD, hdlg, HM_MODULELOAD); dat->hPluginUnload = HookEventMessage(ME_SYSTEM_MODULEUNLOAD, hdlg, HM_MODULEUNLOAD); dat->currentPage = -1; ptrT lastPage, lastGroup, lastTab; OPENOPTIONSDIALOG *ood = (OPENOPTIONSDIALOG*)psh->pStartPage; if (ood->pszPage == NULL) { lastPage = db_get_tsa(NULL, "Options", "LastPage"); if (ood->pszGroup == NULL) lastGroup = db_get_tsa(NULL, "Options", "LastGroup"); else lastGroup = mir_a2t(ood->pszGroup); } else { lastPage = mir_a2t(ood->pszPage); lastGroup = mir_a2t(ood->pszGroup); } if (ood->pszTab == NULL) lastTab = db_get_tsa(NULL, "Options", "LastTab"); else lastTab = mir_a2t(ood->pszTab); OPTIONSDIALOGPAGE *odp = (OPTIONSDIALOGPAGE*)psh->ppsp; for (UINT i = 0; i < psh->nPages; i++, odp++) { opd = new OptionsPageData(odp); if (opd->pDialog == NULL) // smth went wrong delete opd; else dat->arOpd.insert(opd); if (!mir_tstrcmp(lastPage, odp->ptszTitle) && !mir_tstrcmp(lastGroup, odp->ptszGroup)) if ((ood->pszTab == NULL && dat->currentPage == -1) || !mir_tstrcmp(lastTab, odp->ptszTab)) dat->currentPage = (int)i; } GetWindowRect(GetDlgItem(hdlg, IDC_STNOPAGE), &dat->rcDisplay); MapWindowPoints(NULL, hdlg, (LPPOINT)&dat->rcDisplay, 2); // Add an item to count in height TCITEM tie; tie.mask = TCIF_TEXT | TCIF_IMAGE; tie.iImage = -1; tie.pszText = _T("X"); TabCtrl_InsertItem(GetDlgItem(hdlg, IDC_TAB), 0, &tie); GetWindowRect(GetDlgItem(hdlg, IDC_TAB), &dat->rcTab); MapWindowPoints(NULL, hdlg, (LPPOINT)&dat->rcTab, 2); TabCtrl_AdjustRect(GetDlgItem(hdlg, IDC_TAB), FALSE, &dat->rcTab); FillFilterCombo(hdlg, dat); PostMessage(hdlg, DM_REBUILDPAGETREE, 0, 0); } return TRUE; case DM_REBUILDPAGETREE: RebuildPageTree(hdlg, dat); break; case HM_MODULELOAD: LoadOptionsModule(hdlg, dat, (HINSTANCE)lParam); break; case HM_MODULEUNLOAD: UnloadOptionsModule(hdlg, dat, (HINSTANCE)lParam); break; case PSM_CHANGED: EnableWindow(GetDlgItem(hdlg, IDC_APPLY), TRUE); opd = dat->getCurrent(); if (opd) opd->changed = 1; return TRUE; case PSM_GETBOLDFONT: SetWindowLongPtr(hdlg, DWLP_MSGRESULT, (LONG_PTR)dat->hBoldFont); return TRUE; case WM_NOTIFY: switch (wParam) { case IDC_TAB: case IDC_PAGETREE: switch (((LPNMHDR)lParam)->code) { case TVN_ITEMEXPANDING: SetWindowLongPtr(hdlg, DWLP_MSGRESULT, FALSE); return TRUE; case TCN_SELCHANGING: case TVN_SELCHANGING: opd = dat->getCurrent(); if (opd && opd->getHwnd() != NULL) { PSHNOTIFY pshn; pshn.hdr.code = PSN_KILLACTIVE; pshn.hdr.hwndFrom = dat->arOpd[dat->currentPage]->getHwnd(); pshn.hdr.idFrom = 0; pshn.lParam = 0; if (SendMessage(dat->arOpd[dat->currentPage]->getHwnd(), WM_NOTIFY, 0, (LPARAM)&pshn)) { SetWindowLongPtr(hdlg, DWLP_MSGRESULT, TRUE); return TRUE; } } break; case TCN_SELCHANGE: case TVN_SELCHANGED: ShowWindow(GetDlgItem(hdlg, IDC_STNOPAGE), SW_HIDE); opd = dat->getCurrent(); if (opd && opd->getHwnd() != NULL) ShowWindow(opd->getHwnd(), SW_HIDE); if (wParam != IDC_TAB) { TVITEM tvi; tvi.hItem = dat->hCurrentPage = TreeView_GetSelection(hwndTree); if (tvi.hItem == NULL) { ShowWindow(GetDlgItem(hdlg, IDC_TAB), SW_HIDE); break; } tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(hwndTree, &tvi); dat->currentPage = tvi.lParam; ShowWindow(GetDlgItem(hdlg, IDC_TAB), SW_HIDE); } else { TCITEM tie; tie.mask = TCIF_PARAM; TabCtrl_GetItem(GetDlgItem(hdlg, IDC_TAB), TabCtrl_GetCurSel(GetDlgItem(hdlg, IDC_TAB)), &tie); dat->currentPage = tie.lParam; TVITEM tvi; tvi.hItem = dat->hCurrentPage; tvi.mask = TVIF_PARAM; tvi.lParam = dat->currentPage; TreeView_SetItem(hwndTree, &tvi); } opd = dat->getCurrent(); if (opd == NULL) { ShowWindow(GetDlgItem(hdlg, IDC_STNOPAGE), SW_SHOW); break; } if (opd->getHwnd() == NULL) { CreateOptionWindow(opd, hdlg); if (opd->flags & ODPF_BOLDGROUPS) EnumChildWindows(opd->getHwnd(), BoldGroupTitlesEnumChildren, (LPARAM)dat->hBoldFont); RECT rcPage; GetClientRect(opd->getHwnd(), &rcPage); int w = opd->width = rcPage.right; int h = opd->height = rcPage.bottom; RECT rc; GetWindowRect(opd->getHwnd(), &rc); opd->insideTab = IsInsideTab(hdlg, dat, dat->currentPage); if (opd->insideTab) { SetWindowPos(opd->getHwnd(), HWND_TOP, (dat->rcTab.left + dat->rcTab.right - w) >> 1, dat->rcTab.top, w, h, 0); ThemeDialogBackground(opd->getHwnd(), TRUE); } else { SetWindowPos(opd->getHwnd(), HWND_TOP, (dat->rcDisplay.left + dat->rcDisplay.right - w) >> 1, (dat->rcDisplay.top + dat->rcDisplay.bottom - h) >> 1, w, h, 0); ThemeDialogBackground(opd->getHwnd(), FALSE); } } if (wParam != IDC_TAB) { opd->insideTab = IsInsideTab(hdlg, dat, dat->currentPage); if (opd->insideTab) { // Make tabbed pane int pages = 0, sel = 0; HWND hwndTab = GetDlgItem(hdlg, IDC_TAB); TabCtrl_DeleteAllItems(hwndTab); TCITEM tie; tie.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM; tie.iImage = -1; for (int i = 0; i < dat->arOpd.getCount(); i++) { if (!CheckPageShow(hdlg, dat, i)) continue; OptionsPageData *p = dat->arOpd[i]; if (mir_tstrcmp(opd->ptszTitle, p->ptszTitle) || mir_tstrcmp(opd->ptszGroup, p->ptszGroup)) continue; tie.pszText = TranslateTH(p->hLangpack, p->ptszTab); tie.lParam = i; TabCtrl_InsertItem(hwndTab, pages, &tie); if (!mir_tstrcmp(opd->ptszTab, p->ptszTab)) sel = pages; pages++; } TabCtrl_SetCurSel(hwndTab, sel); ShowWindow(hwndTab, opd->insideTab ? SW_SHOW : SW_HIDE); } ThemeDialogBackground(opd->getHwnd(), opd->insideTab); } ShowWindow(opd->getHwnd(), SW_SHOW); if (((LPNMTREEVIEW)lParam)->action == TVC_BYMOUSE) PostMessage(hdlg, DM_FOCUSPAGE, 0, 0); else SetFocus(hwndTree); }
static INT_PTR CALLBACK FtMgrDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { struct TFtMgrData *dat = (struct TFtMgrData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: { TCITEM tci = {0}; HWND hwndTab = GetDlgItem(hwnd, IDC_TABS); TranslateDialogDefault(hwnd); Window_SetIcon_IcoLib(hwnd, SKINICON_EVENT_FILE); dat = (struct TFtMgrData *)mir_calloc(sizeof(struct TFtMgrData)); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)dat); dat->hhkPreshutdown = HookEventMessage(ME_SYSTEM_PRESHUTDOWN, hwnd, M_PRESHUTDOWN); dat->hwndIncoming = CreateDialog(hMirandaInst, MAKEINTRESOURCE(IDD_FTPAGE), hwnd, FtMgrPageDlgProc); dat->hwndOutgoing = CreateDialog(hMirandaInst, MAKEINTRESOURCE(IDD_FTPAGE), hwnd, FtMgrPageDlgProc); ShowWindow(dat->hwndIncoming, SW_SHOW); tci.mask = TCIF_PARAM|TCIF_TEXT; tci.pszText = TranslateT("Incoming"); tci.lParam = (LPARAM)dat->hwndIncoming; TabCtrl_InsertItem(hwndTab, 0, &tci); tci.pszText = TranslateT("Outgoing"); tci.lParam = (LPARAM)dat->hwndOutgoing; TabCtrl_InsertItem(hwndTab, 1, &tci); // Utils_RestoreWindowPosition(hwnd, NULL, "SRFile", "FtMgrDlg_"); SAVEWINDOWPOS swp; swp.hwnd=hwnd; swp.hContact=NULL; swp.szModule="SRFile"; swp.szNamePrefix="FtMgrDlg_"; CallService(MS_UTILS_RESTOREWINDOWPOSITION, RWPF_NOACTIVATE, (LPARAM)&swp); // Fall through to setup initial placement } case WM_SIZE: { RECT rc, rcButton; HDWP hdwp; HWND hwndTab = GetDlgItem(hwnd, IDC_TABS); GetWindowRect(GetDlgItem(hwnd, IDCANCEL), &rcButton); OffsetRect(&rcButton, -rcButton.left, -rcButton.top); GetClientRect(hwnd, &rc); InflateRect(&rc, -6, -6); hdwp = BeginDeferWindowPos(3); hdwp = DeferWindowPos(hdwp, GetDlgItem(hwnd, IDC_CLEAR), NULL, rc.left, rc.bottom-rcButton.bottom, 0, 0, SWP_NOZORDER|SWP_NOSIZE); hdwp = DeferWindowPos(hdwp, GetDlgItem(hwnd, IDCANCEL), NULL, rc.right-rcButton.right, rc.bottom-rcButton.bottom, 0, 0, SWP_NOZORDER|SWP_NOSIZE); rc.bottom -= rcButton.bottom + 5; hdwp = DeferWindowPos(hdwp, hwndTab, NULL, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER); EndDeferWindowPos(hdwp); GetWindowRect(hwndTab, &rc); MapWindowPoints(NULL, hwnd, (LPPOINT)&rc, 2); TabCtrl_AdjustRect(hwndTab, FALSE, &rc); InflateRect(&rc, -5, -5); hdwp = BeginDeferWindowPos(2); hdwp = DeferWindowPos(hdwp, dat->hwndIncoming, HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0); hdwp = DeferWindowPos(hdwp, dat->hwndOutgoing, HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0); EndDeferWindowPos(hdwp); break; } case WM_MOUSEWHEEL: { if (IsWindowVisible(dat->hwndIncoming)) SendMessage(dat->hwndIncoming, msg, wParam, lParam); if (IsWindowVisible(dat->hwndOutgoing)) SendMessage(dat->hwndOutgoing, msg, wParam, lParam); break; } case WM_FT_SELECTPAGE: { TCITEM tci = {0}; HWND hwndTab = GetDlgItem(hwnd, IDC_TABS); if (TabCtrl_GetCurSel(hwndTab) == (int)wParam) break; tci.mask = TCIF_PARAM; TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &tci); ShowWindow((HWND)tci.lParam, SW_HIDE); TabCtrl_SetCurSel(hwndTab, wParam); TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &tci); ShowWindow((HWND)tci.lParam, SW_SHOW); break; } case WM_GETMINMAXINFO: { LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam; lpmmi->ptMinTrackSize.x = 300; lpmmi->ptMinTrackSize.y = 400; return 0; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: PostMessage(hwnd, WM_CLOSE , 0, 0); break; case IDC_CLEAR: PostMessage(dat->hwndIncoming, WM_FT_CLEANUP, 0, 0); PostMessage(dat->hwndOutgoing, WM_FT_CLEANUP, 0, 0); break; } break; case WM_NOTIFY: { switch (((LPNMHDR)lParam)->idFrom) { case IDC_TABS: { HWND hwndTab = GetDlgItem(hwnd, IDC_TABS); switch (((LPNMHDR)lParam)->code) { case TCN_SELCHANGING: { TCITEM tci = {0}; tci.mask = TCIF_PARAM; TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &tci); ShowWindow((HWND)tci.lParam, SW_HIDE); break; } case TCN_SELCHANGE: { TCITEM tci = {0}; tci.mask = TCIF_PARAM; TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &tci); ShowWindow((HWND)tci.lParam, SW_SHOW); break; } } break; } } break; } case M_PRESHUTDOWN: SendMessage(dat->hwndIncoming, M_PRESHUTDOWN, 0, 0); SendMessage(dat->hwndOutgoing, M_PRESHUTDOWN, 0, 0); DestroyWindow(hwnd); break; case WM_CLOSE: ShowWindow(hwnd, SW_HIDE); if (DBGetContactSettingByte(NULL, "SRFile", "AutoClear", 1)) { PostMessage(dat->hwndIncoming, WM_FT_CLEANUP, 0, 0); PostMessage(dat->hwndOutgoing, WM_FT_CLEANUP, 0, 0); } return TRUE; /* Disable default IDCANCEL notification */ case WM_DESTROY: UnhookEvent(dat->hhkPreshutdown); Window_FreeIcon_IcoLib(hwnd); DestroyWindow(dat->hwndIncoming); DestroyWindow(dat->hwndOutgoing); mir_free(dat); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); Utils_SaveWindowPosition(hwnd, NULL, "SRFile", "FtMgrDlg_"); break; case WM_ACTIVATE: { dat->errorState = TBPF_NOPROGRESS; wParam = 1; } break; case WM_SHOWWINDOW: { if (!wParam) // hiding { KillTimer(hwnd, 1); break; } lParam = 0; } case WM_TIMER: { if (pTaskbarInterface) { SetTimer(hwnd, 1, 400, NULL); if ((lParam == ACKRESULT_FAILED) || (lParam == ACKRESULT_DENIED)) dat->errorState = TBPF_ERROR; TFtProgressData prg = {0}; SendMessage(dat->hwndIncoming, M_CALCPROGRESS, (WPARAM)&prg, 0); SendMessage(dat->hwndOutgoing, M_CALCPROGRESS, (WPARAM)&prg, 0); if (dat->errorState) { pTaskbarInterface->SetProgressState(hwnd, dat->errorState); if (!prg.run) pTaskbarInterface->SetProgressValue(hwnd, 1, 1); } else if (prg.run) { pTaskbarInterface->SetProgressState(hwnd, TBPF_NORMAL); } else if (prg.init || prg.scan) { pTaskbarInterface->SetProgressState(hwnd, TBPF_INDETERMINATE); } else { pTaskbarInterface->SetProgressState(hwnd, TBPF_NOPROGRESS); KillTimer(hwnd, 1); } if (prg.run) { pTaskbarInterface->SetProgressValue(hwnd, prg.totalProgress, prg.totalBytes); } } } break; } return FALSE; }
BOOL AP_Win32Dialog_Paragraph::_onInitTab(HWND hWnd, WPARAM wParam, LPARAM lParam) { const XAP_StringSet * pSS = m_pApp->getStringSet(); UT_Win32LocaleString str; // position ourselves w.r.t. containing tab RECT r; GetClientRect(m_hwndTab, &r); TabCtrl_AdjustRect(m_hwndTab, FALSE, &r); SetWindowPos(hWnd, HWND_TOP, r.left, r.top, 0, 0, SWP_NOSIZE); // remember which window is which tab TabParam * pTP = (TabParam *) lParam; switch (pTP->which) { case AP_RID_DIALOG_PARA_TAB1: // first tab { m_hwndSpacing = hWnd; // Hide Bidi Check Box unless required { HWND hwndBidi = GetDlgItem(hWnd, AP_RID_DIALOG_PARA_CHECK_BIDI); ShowWindow(hwndBidi,SW_HIDE); ShowWindow(hwndBidi,SW_SHOW); } // localize controls _DS(PARA_TEXT_ALIGN, DLG_Para_LabelAlignment); _DS(PARA_TEXT_INDENT, DLG_Para_LabelIndentation); _DS(PARA_TEXT_LEFT, DLG_Para_LabelLeft); _DS(PARA_TEXT_RIGHT, DLG_Para_LabelRight); _DS(PARA_TEXT_HANG, DLG_Para_LabelSpecial); _DS(PARA_TEXT_BY, DLG_Para_LabelBy); _DS(PARA_TEXT_SPACING, DLG_Para_LabelSpacing); _DS(PARA_TEXT_BEFORE, DLG_Para_LabelBefore); _DS(PARA_TEXT_AFTER, DLG_Para_LabelAfter); _DS(PARA_TEXT_LEAD, DLG_Para_LabelLineSpacing); _DS(PARA_TEXT_AT, DLG_Para_LabelAt); _DS(PARA_CHECK_BIDI, DLG_Para_DomDirection); // populate fixed choices { HWND hwndAlign = GetDlgItem(hWnd, AP_RID_DIALOG_PARA_COMBO_ALIGN); // insert the empty value (for multi-para selections with different state) SendMessageW(hwndAlign, CB_ADDSTRING, 0, (LPARAM) L""); _CAS(hwndAlign, DLG_Para_AlignLeft); _CAS(hwndAlign, DLG_Para_AlignCentered); _CAS(hwndAlign, DLG_Para_AlignRight); _CAS(hwndAlign, DLG_Para_AlignJustified); SendMessageW(hwndAlign, CB_SETCURSEL, (WPARAM) _getMenuItemValue(id_MENU_ALIGNMENT), 0); HWND hwndHang = GetDlgItem(hWnd, AP_RID_DIALOG_PARA_COMBO_HANG); SendMessageW(hwndHang, CB_ADDSTRING, 0, (LPARAM) L""); _CAS(hwndHang, DLG_Para_SpecialNone); _CAS(hwndHang, DLG_Para_SpecialFirstLine); _CAS(hwndHang, DLG_Para_SpecialHanging); SendMessageW(hwndHang, CB_SETCURSEL, (WPARAM) _getMenuItemValue(id_MENU_SPECIAL_INDENT), 0); HWND hwndLead = GetDlgItem(hWnd, AP_RID_DIALOG_PARA_COMBO_LEAD); SendMessageW(hwndLead, CB_ADDSTRING, 0, (LPARAM) L""); _CAS(hwndLead, DLG_Para_SpacingSingle); _CAS(hwndLead, DLG_Para_SpacingHalf); _CAS(hwndLead, DLG_Para_SpacingDouble); _CAS(hwndLead, DLG_Para_SpacingAtLeast); _CAS(hwndLead, DLG_Para_SpacingExactly); _CAS(hwndLead, DLG_Para_SpacingMultiple); SendMessageW(hwndLead, CB_SETCURSEL, (WPARAM) _getMenuItemValue(id_MENU_SPECIAL_SPACING), 0); } // set initial state _SST(PARA_EDIT_LEFT, id_SPIN_LEFT_INDENT); _SST(PARA_EDIT_RIGHT, id_SPIN_RIGHT_INDENT); _SST(PARA_EDIT_BY, id_SPIN_SPECIAL_INDENT); _SST(PARA_EDIT_BEFORE, id_SPIN_BEFORE_SPACING); _SST(PARA_EDIT_AFTER, id_SPIN_AFTER_SPACING); _SST(PARA_EDIT_AT, id_SPIN_SPECIAL_SPACING); _CDB(PARA_CHECK_BIDI, id_CHECK_DOMDIRECTION); } break; case AP_RID_DIALOG_PARA_TAB2: // second tab { m_hwndBreaks = hWnd; // localize controls _DS(PARA_TEXT_PAGE, DLG_Para_LabelPagination); _DS(PARA_CHECK_WIDOW, DLG_Para_PushWidowOrphanControl); _DS(PARA_CHECK_NEXT, DLG_Para_PushKeepWithNext); _DS(PARA_CHECK_TOGETHER, DLG_Para_PushKeepLinesTogether); _DS(PARA_CHECK_BREAK, DLG_Para_PushPageBreakBefore); _DS(PARA_CHECK_SUPPRESS, DLG_Para_PushSuppressLineNumbers); _DS(PARA_CHECK_NOHYPHEN, DLG_Para_PushNoHyphenate); // set initial state _CDB(PARA_CHECK_WIDOW, id_CHECK_WIDOW_ORPHAN); _CDB(PARA_CHECK_NEXT, id_CHECK_KEEP_NEXT); _CDB(PARA_CHECK_TOGETHER, id_CHECK_KEEP_LINES); _CDB(PARA_CHECK_BREAK, id_CHECK_PAGE_BREAK); _CDB(PARA_CHECK_SUPPRESS, id_CHECK_SUPPRESS); _CDB(PARA_CHECK_NOHYPHEN, id_CHECK_NO_HYPHENATE); } break; default: UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); break; } // the following are common to each tab _DS(PARA_TEXT_PREVIEW, DLG_Para_LabelPreview); if (!m_pPreviewWidget) { // for XP purposes, life is simplest if we only have one preview // widget which "floats" above both tabs. to get the window // parentage right, we use the dimensions and location of the // owner-draw control on the tab to position *another* dummy // window which is parented by the main dialog instead. HWND hwndChild = GetDlgItem(hWnd, AP_RID_DIALOG_PARA_PREVIEW); HWND hwndFloater = GetDlgItem(m_hwndDlg, AP_RID_DIALOG_PARA_PREVIEW); RECT r2; GetWindowRect(hwndChild, &r2); POINT pt; pt.x = r2.left; pt.y = r2.top; ScreenToClient(m_hwndDlg, &pt); SetWindowPos(hwndFloater, HWND_TOP, pt.x, pt.y, r2.right - r2.left, r2.bottom - r2.top, SWP_NOREDRAW); // use this floater window as a parent to the widget that we create // here and thus have complete control of. m_pPreviewWidget = new XAP_Win32PreviewWidget(static_cast<XAP_Win32App *>(m_pApp), hwndFloater, 0); // instantiate the XP preview object using the win32 preview widget (window) // we just created. we seem to have a mish-mash of terms here, sorry. UT_uint32 w,h; m_pPreviewWidget->getWindowSize(&w,&h); _createPreviewFromGC(m_pPreviewWidget->getGraphics(),w,h); m_pPreviewWidget->setPreview(m_paragraphPreview); // we need this to call draw() on WM_PAINTs // _updatePreview(); } return 1; // 1 == we did not call SetFocus() }
void CTabPanelWin::CreateRebar() { RECT rcWnd = {-32000, -32000, -32000+300, -32000+100}; if (ghWnd) { rcWnd = gpConEmu->GetGuiClientRect(); } else { _ASSERTE(ghWnd!=NULL); // вроде ReBar для теста не создается. } gpSetCls->CheckTheming(); if (NULL == (mh_Rebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, (ghWnd ? (WS_VISIBLE | WS_CHILD) : 0) |WS_CLIPSIBLINGS|WS_CLIPCHILDREN |/*CCS_NORESIZE|*/CCS_NOPARENTALIGN |RBS_FIXEDORDER|RBS_AUTOSIZE|/*RBS_VARHEIGHT|*/CCS_NODIVIDER, 0,0,rcWnd.right,16, ghWnd, NULL, g_hInstance, NULL))) return; #if !defined(__GNUC__) #pragma warning (disable : 4312) #endif // Надо TabPanelWinMap map = {this}; //{ CTabPanelWin* object; HWND hWnd; WNDPROC defaultProc; }; map.defaultProc = (WNDPROC)SetWindowLongPtr(mh_Rebar, GWLP_WNDPROC, (LONG_PTR)_ReBarProc); map.hWnd = mh_Rebar; gp_TabPanelWinMap->Set(mh_Rebar, map); REBARINFO rbi = {sizeof(REBARINFO)}; REBARBANDINFO rbBand = {80}; // не используем size, т.к. приходит "новый" размер из висты и в XP обламываемся if (!SendMessage(mh_Rebar, RB_SETBARINFO, 0, (LPARAM)&rbi)) { DisplayLastError(_T("Can't initialize rebar!")); DestroyWindow(mh_Rebar); mh_Rebar = NULL; return; } rbBand.fMask = RBBIM_SIZE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_ID | RBBIM_STYLE | RBBIM_COLORS; rbBand.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDSIZE | RBBS_VARIABLEHEIGHT; rbBand.clrBack = GetSysColor(COLOR_BTNFACE); rbBand.clrFore = GetSysColor(COLOR_BTNTEXT); SendMessage(mh_Rebar, RB_SETBKCOLOR, 0, GetSysColor(COLOR_BTNFACE)); SendMessage(mh_Rebar, RB_SETWINDOWTHEME, 0, (LPARAM)L" "); CreateTabbar(); CreateToolbar(); SIZE sz = {0,0}; if (mh_Toolbar) { SendMessage(mh_Toolbar, TB_GETMAXSIZE, 0, (LPARAM)&sz); } else { RECT rcClient = gpConEmu->GetGuiClientRect(); TabCtrl_AdjustRect(mh_Tabbar, FALSE, &rcClient); sz.cy = rcClient.top - 3 - mn_ThemeHeightDiff; } if (mh_Tabbar) { // Set values unique to the band with the toolbar. rbBand.wID = 1; rbBand.hwndChild = mh_Tabbar; rbBand.cxMinChild = 100; rbBand.cx = rbBand.cxIdeal = rcWnd.right - sz.cx - 80; rbBand.cyChild = rbBand.cyMinChild = rbBand.cyMaxChild = mn_TabHeight; // sz.cy; if (!SendMessage(mh_Rebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand)) { DisplayLastError(_T("Can't initialize rebar (tabbar)")); } } if (mh_Toolbar) { // Set values unique to the band with the toolbar. rbBand.wID = 2; rbBand.hwndChild = mh_Toolbar; rbBand.cx = rbBand.cxMinChild = rbBand.cxIdeal = mn_LastToolbarWidth = sz.cx; rbBand.cyChild = rbBand.cyMinChild = rbBand.cyMaxChild = sz.cy + mn_ThemeHeightDiff; // Add the band that has the toolbar. if (!SendMessage(mh_Rebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand)) { DisplayLastError(_T("Can't initialize rebar (toolbar)")); } //if (mn_ThemeHeightDiff) { // POINT pt = {0,0}; // MapWindowPoints(mh_Toolbar, mh_Rebar, &pt, 1); // pt.y = 0; // SetWindowPos(mh_Toolbar, NULL, pt.x, pt.y, 0, 0, SWP_NOSIZE|SWP_NOZORDER); //} } #ifdef _DEBUG RECT rc; GetWindowRect(mh_Rebar, &rc); #endif //GetWindowRect(mh_Rebar, &rc); //mn_TabHeight = rc.bottom - rc.top; //if (gpSet->nTabsLocation == 1) // m_Margins = MakeRect(0,0,0,mn_TabHeight); //else // m_Margins = MakeRect(0,mn_TabHeight,0,0); //gpSet->UpdateMargins(m_Margins); //_hwndTab = mh_Rebar; // пока... }
static INT_PTR CALLBACK DialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static activePage = 0; switch (msg) { /* init */ case WM_INITDIALOG: { LOCALDATA *data = LocalAlloc(LPTR, sizeof(LOCALDATA)); HINSTANCE inst = (HINSTANCE)lParam; TCITEM item; /* init */ SetWindowLong(hwnd, GWL_USERDATA, (LONG)data); data->htab = GetDlgItem(hwnd, IDC_TABS); data->hdlg = NULL; /* add pages */ item.mask = TCIF_TEXT; data->all[0] = CreateDialog(inst, MAKEINTRESOURCE(IDD_CONFIG_GENERAL), hwnd, GeneralProc); item.pszText = "General"; TabCtrl_InsertItem(data->htab, 0, &item); data->all[1] = CreateDialog(inst, MAKEINTRESOURCE(IDD_CONFIG_OUTPUT), hwnd, OutputProc); item.pszText = "Output"; TabCtrl_InsertItem(data->htab, 1, &item); /* get rect (after adding pages) */ GetWindowRect(data->htab, &data->r); ScreenToClientRect(hwnd, &data->r); TabCtrl_AdjustRect(data->htab, 0, &data->r); /* simulate item change */ TabCtrl_SetCurSel(data->htab, activePage); OnSelChange(hwnd); } return TRUE; /* destory */ case WM_DESTROY: { LOCALDATA *data = (LOCALDATA*)GetWindowLong(hwnd, GWL_USERDATA); int i; activePage = TabCtrl_GetCurSel(data->htab); for (i=0; i<NUM_PAGES; i++) DestroyWindow(data->all[i]); LocalFree(data); } break; /* commands */ case WM_COMMAND: switch (LOWORD(wParam)) { /* ok/cancel */ case IDOK: BroadcastCommand(hwnd, IDOK); /* fall through */ case IDCANCEL: EndDialog(hwnd, LOWORD(wParam)); return TRUE; case IDC_RESET: SendCommand(hwnd, IDC_RESET); break; } break; /* notification */ case WM_NOTIFY: if (LOWORD(wParam) == IDC_TABS) { NMHDR *hdr = (NMHDR*)lParam; switch (hdr->code) { case TCN_SELCHANGE: OnSelChange(hwnd); break; } } break; } return 0; }