void TrayNotifyDlg::InsertItem(HTREEITEM hparent, HTREEITEM after, const NotifyIconDlgInfo& entry, HDC hdc, HICON hicon, NOTIFYICONMODE mode) { int idx = _info.size() + 1; _info[idx] = entry; String mode_str = string_from_mode(mode); switch(mode) { case NIM_SHOW: mode_str = ResString(IDS_NOTIFY_SHOW); break; case NIM_HIDE: mode_str = ResString(IDS_NOTIFY_HIDE); break; case NIM_AUTO: mode_str = ResString(IDS_NOTIFY_AUTOHIDE); } FmtString txt(TEXT("%s - %s [%s]"), entry._tipText.c_str(), entry._windowTitle.c_str(), mode_str.c_str()); TV_INSERTSTRUCT tvi; tvi.hParent = hparent; tvi.hInsertAfter = after; TV_ITEM& tv = tvi.item; tv.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tv.lParam = (LPARAM)idx; tv.pszText = txt.str(); tv.iSelectedImage = tv.iImage = ImageList_AddAlphaIcon(_himl, hicon, GetStockBrush(WHITE_BRUSH), hdc); (void)TreeView_InsertItem(_tree_ctrl, &tvi); }
// -------------------------------------------------------------------------------------------- // Reaktion auf Click eines Buttons void COptionsDlg::ButtonClick (ControlEvt e) { switch ((uint) e.GetControlID()) { case IDC_FEATFROMORIGIN: m_Descript.SetText (ResString (ResID (IDS_KOMM22, pRF), 250).Addr()); break; case IDC_ORIGINDEL: m_CBoxMark.SetChecked (false); m_CBoxShowOrig.SetChecked (false); m_Descript.SetText (ResString (ResID (IDS_KOMM23, pRF), 250).Addr()); break; case IDC_ORIGINMARK: m_CBoxDelete.SetChecked (false); m_Descript.SetText (ResString (ResID (IDS_KOMM24, pRF), 250).Addr()); break; case IDC_SHOWNEW: m_Descript.SetText (ResString (ResID (IDS_KOMM25, pRF), 250).Addr()); break; case IDC_SHOWORIG: m_CBoxDelete.SetChecked (false); m_Descript.SetText (ResString (ResID (IDS_KOMM26, pRF), 250).Addr()); break; } AdjustSheetWizardBttns (this, m_dwFlags); // die nachfolgende Zeile ist erforderlich, weil nicht immer OnKillActive() kommt PrepareResult(); } // ButtonClick
// -------------------------------------------------------------------------------------------- // aktuellen Flächeninhalt in Statuszeile anzeigen bool CNewArea::AktuelleWerteAnzeigen (Point Pt) { if (! m_wObj.IsValid() || // der 1. Punkt der zu editierenden Fläche ist noch nicht gesetzt bzw. m_bIsland) // Beginn einer neuen Insel wurde soeben angezeigt: return false; // deshalb keinen aktuellen Flächeninhalt anzeigen m_dAktDreieck = DreieckInhalt (Pt, m_FirstPkt, m_LastPkt, m_pCT); string sOutBuff = ""; // Ausgabepuffer double dZwFlInh; // aktueller Zwischenstand des Flächeninhalts if (1 == m_iKCnt) // Neueditierung der Außenkontur dZwFlInh = fabs(m_dAktGesFlaeche + m_dAktDreieck); else // Neueditierung einer Innenkontur { sOutBuff += ResString (ResID (IDS_AKTINSEL, pRF), 40); FlInhaltNormieren (fabs(m_dAktInsel + m_dAktDreieck), sOutBuff); sOutBuff += "; "; dZwFlInh = m_dAktGesFlaeche - fabs(m_dAktInsel + m_dAktDreieck); } sOutBuff += ResString (ResID (IDS_GESAMTINHALT, pRF), 40); FlInhaltNormieren (dZwFlInh, sOutBuff); if (m_dAktDreieck != 0. || dZwFlInh != 0.) DEX_SetMessageStringNoKickIdle (sOutBuff.c_str()); return true; } // AktuelleWerteAnzeigen
// -------------------------------------------------------------------------------------------- // Text in der Statuszeile entsprechend der CursorForm modifizieren void CGeoEditExtension::StatuszeileModifizieren (CursForm CF) { ResString rsText (ResID (IDS_CURVERTEXMOVE, pRF), 100); // case CURSFORM_STERN switch (CF) { case CURSFORM_CROSS: rsText = ResString (ResID (IDS_CUREDIT, pRF), 100); break; case CURSFORM_TRENNER: rsText = ResString (ResID (IDS_CURVERTEXADD, pRF), 100); break; case CURSFORM_KREUZ: rsText = ResString (ResID (IDS_CURVERTEXDEL, pRF), 100); break; case CURSFORM_INOBJEKT: rsText = ResString (ResID (IDS_CUROBJECTMOVE, pRF), 100); break; case CURSFORM_FANGEN: rsText = ResString (ResID (IDS_INMARKER, pRF), 100); break; } DEX_SetMessageStringNoKickIdle (rsText.Addr()); } // StatuszeileModifizieren
void JEApp::ReadyToRun() { // instantiate UI here // preload ICON resources used by UI AppResources()->PreloadResourceType('ICON'); // Window for Source1 source1Win = new VideoWindow(BRect(10.0,75.0, 179.0,204.0), ResString(STRING_SOURCE1), true); // Window for Source2 source2Win = new VideoWindow(BRect(10.0,280.0, 179.0,409.0), ResString(STRING_SOURCE2), true); // Window for default Output defaultOut = new VideoWindow(BRect(510.0,75.0, 839.0,324.0), ResString(STRING_DEFAULT_OUTPUT), false); // Window for Plugins piWindow = new PluginListWindow(BRect(510.0,375.0, 689.0,554.0), ResString(STRING_PLUGINS)); // Main Window mainWin = new MainWindow(BRect(200.0,75.0, 499.0,474.0), "Jeepers Elvis!"); // you need to tell the graphics pipeline about the default output PostMessage(JE_SET_DEFAULT_OUTPUT); // and the sources about their outputs PostMessage(JE_SET_SOURCE_OUTPUTS); }
void JEApp::AboutRequested() { BAlert *alert; BString gutsText("Jeepers Elvis! v0.2\n"); gutsText += B_UTF8_COPYRIGHT; gutsText += " John Wiggins : 2000-2002\n\n- "; gutsText += RandomQuote(); alert = new BAlert("about", gutsText.String(), ResString(STRING_EMAIL), ResString(STRING_OK)); alert->Go(new BInvoker(new BMessage(JE_SEND_EMAIL), this)); }
// -------------------------------------------------------------------------------------------- // ComboBox füllen void CTopoRelRefDlg :: FillComboBox (void) { ResourceFile RF (g_pDLLName); ResString resNewItem (ResID(IDS_ATLEAST, &RF), 20); m_RefTypeList.AddString (resNewItem, 0); resNewItem = ResString (ResID(IDS_ATMOST, &RF), 20); m_RefTypeList.AddString (resNewItem, 1); resNewItem = ResString (ResID(IDS_EXACTLY, &RF), 204); m_RefTypeList.AddString (resNewItem, 2); }
String string_from_mode(NOTIFYICONMODE mode) { switch(mode) { case NIM_SHOW: return ResString(IDS_NOTIFY_SHOW); case NIM_HIDE: return ResString(IDS_NOTIFY_HIDE); default: //case NIM_AUTO return ResString(IDS_NOTIFY_AUTOHIDE); } }
/////////////////////////////////////////////////////////////////////////////////////////////// // EventHandler // Call-Back-Funktion für die Initialisierung der Controls void COptionsDlg::WindowInit (Event) { // explizite Initialisierung der Controls m_CBoxFeature.FInit(); m_CBoxDelete.FInit(); m_CBoxMark.FInit(); m_CBoxShowNew.FInit(); m_CBoxShowOrig.FInit(); m_Descript.FInit(); m_OR.bFeat ? m_CBoxFeature.SetChecked (true) : m_CBoxFeature.SetChecked (false); m_OR.bDelete ? m_CBoxDelete.SetChecked (true) : m_CBoxDelete.SetChecked (false); m_OR.bMark ? m_CBoxMark.SetChecked (true) : m_CBoxMark.SetChecked (false); if (m_OR.bDelete) _ASSERTE (m_OR.bMark == false); if (m_OR.bMark) _ASSERTE (m_OR.bDelete == false); m_OR.bShowNew ? m_CBoxShowNew.SetChecked (true) : m_CBoxShowNew.SetChecked (false); m_OR.bShowOrig ? m_CBoxShowOrig.SetChecked (true) : m_CBoxShowOrig.SetChecked (false); m_Descript.SetText (ResString (ResID (IDS_KOMM21, pRF), 250).Addr()); AdjustSheetWizardBttns (this, m_dwFlags); } // WindowInit
bool CMainWindow::RegisterAndCreateWindow() { WNDCLASSEX wcx; // Fill in the window class structure with default parameters wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc = CWindow::stWinMsgHandler; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hResource; wcx.hCursor = NULL; wcx.lpszClassName = ResString(hResource, IDS_APP_TITLE); wcx.hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_TORTOISEUDIFF)); wcx.hbrBackground = (HBRUSH)(COLOR_3DFACE+1); wcx.lpszMenuName = MAKEINTRESOURCE(IDC_TORTOISEUDIFF); wcx.hIconSm = LoadIcon(wcx.hInstance, MAKEINTRESOURCE(IDI_TORTOISEUDIFF)); if (RegisterWindow(&wcx)) { if (Create(WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN, NULL)) { m_FindBar.SetParent(*this); m_FindBar.Create(hResource, IDD_FINDBAR, *this); UpdateWindow(*this); return true; } } return false; }
// -------------------------------------------------------------------------------------------- // wird gerufen, wenn diese Page aktiviert werden soll (i. a. dann, wenn in der vorangehenden // Page der Button "Weiter" bzw. in der nachfolgenden Page der Button "Zurück" gedrückt wurde) BOOL COptionsDlg::OnSetActive (NotifyEvt e) { m_Descript.SetText (ResString (ResID (IDS_KOMM21, pRF), 250).Addr()); AdjustSheetWizardBttns (this, m_dwFlags); return FALSE; // bei Gültigkeit "FALSE" sonst "TRUE" (???) }
// durch den optionalen Parameter PSH_NOAPPLYNOW wird der ApplyButton ganz einfach übergangen CDesignDlg::CDesignDlg (Point FixPt) : CEditObjectSheet (ResString(ResID(IDS_DESIGNCAP,pRF),70), g_pTE->MVWind(), PSH_NOAPPLYNOW), m_OK (this, IDOK)/*, m_Cancel (this, IDCANCEL)*/ { m_FixPt = FixPt; }
/////////////////////////////////////////////////////////////////////////////////////////////// // EventHandler // Call-Back-Funktion für die Initialisierung der Controls void CTopoRelRefDlg::WindowInit (Event) { ResourceFile RF (g_pDLLName); // explizite Initialisierung der Controls m_RBttnAllRefs.FInit(); m_RBttnSomeRefs.FInit(); m_RefTypeList.FInit(); m_SpinCount.FInit(); m_Descript.FInit(); // Controls setzen FillComboBox(); switch (m_iReferenceType) { case All: m_RBttnAllRefs.SetState (true); m_SpinCount.Disable(); m_Descript.SetText (ResString (ResID (IDS_COMMALL, &RF), 250).Addr()); break; case Least: m_RBttnSomeRefs.SetState (true); m_SpinCount.Enable(); m_Descript.SetText (ResString (ResID (IDS_COMMLEAST, &RF), 250).Addr()); break; case Most: m_RBttnSomeRefs.SetState (true); m_SpinCount.Enable(); m_Descript.SetText (ResString (ResID (IDS_COMMMOST, &RF), 250).Addr()); break; case Exact: m_RBttnSomeRefs.SetState (true); m_SpinCount.Enable(); m_Descript.SetText (ResString (ResID (IDS_COMMEXACT, &RF), 250).Addr()); } m_RefTypeList.ChangeCurrentIndex (m_iRefListIndex); m_RefTypeList.SetFocus(); m_SpinCount.SetValue(m_lLimitCnt); } // WindowInit
HyperlinkCtrl::HyperlinkCtrl(HWND hwnd, COLORREF colorLink, COLORREF colorVisited) : super(hwnd), _cmd(ResString(GetDlgCtrlID(hwnd))), _textColor(colorLink), _colorVisited(colorVisited), _hfont(0), _crsr_link(0) { init(); }
HyperlinkCtrl::HyperlinkCtrl(HWND owner, int id, COLORREF colorLink, COLORREF colorVisited) : super(GetDlgItem(owner, id)), _cmd(ResString(id)), _textColor(colorLink), _colorVisited(colorVisited), _hfont(0), _crsr_link(0) { init(); }
bool CIdentsDBExtension::ExportDataSourceAsXml (LPUNKNOWN pIUnk, HPROJECT hPr, LPCSTR pFName, ULONG &rulCnt) { if (pIUnk) LPPROGRESSINDICATOR(pIUnk) -> ChangeText (PIFLAG_FILENAME, pFName); // Datei bilden, wenn diese noch nicht existiert int fh = _lcreat (pFName, 0); if (fh < 0) return false; bool fRet = false; { // hier geht's los CXMLDocument Doc (fh); // <?xml ...?> char cbBuffer[80]; // TRiAS Version, aktuelle Zeit os_time_and_date now; string resVersion (g_cbTRiAS); ResString resTempl (IDS_SIGNONVERSION_MODAL, _MAX_PATH); resVersion += ": "; resVersion += resTempl; ATLTRY(now = os_time_and_date::now()); strcpy (cbBuffer, resVersion.c_str()); strcat (cbBuffer, now.to_string(" %e. %B %Y, %T").c_str()); CXMLComment (fh, cbBuffer); CXMLComment (fh, ResString (IDS_COPYRIGHT, 100)); // allgemeines Copyright // DTD einfügen CXMLRawData (fh, s_cbDTD); // die eigentlichen Infos ausgeben CXMLAttribute Attr ("Version", "1.0"); CXMLNode MainNode (fh, g_cbTRiASMetadata, Attr); ENUMLONGKEY ELK; EXPORTDATA ED; ED.fh = fh; ED.pIUnk = pIUnk; ED.ulCnt = rulCnt; ELK.eKey = 'i'; ELK.eFcn = (ENUMLONGKEYPROC)ExportIdentEntryAsXml; ELK.ePtr = &ED; fRet = DEX_EnumPBDDataEx (hPr, ELK); rulCnt = ED.ulCnt; } // Datei wieder schließen _lclose (fh); // Datei schließen return fRet; }
CEditCoordDlg::CEditCoordDlg (int iCloseCnt, KoOrd* plCloseX, KoOrd* plCloseY, KoOrd x, KoOrd y) : CPropertyPage (ResID(IDD_COORDMODIFY, pRF), ResString (ResID(IDS_EDITCOORDCAP, pRF), 32)), m_X (this, IDE_XKOORD), m_Y (this, IDE_YKOORD), m_DeleteButton (this, IDB_DELETE), m_DeleteText (this, IDT_DELETE) { StandardWerte (iCloseCnt, plCloseX, plCloseY, x, y); }
// -------------------------------------------------------------------------------------------- // Editierfeld erhält den Focus void CTopoRelRefDlg :: EditFocusChg (EditFocusChgEvt e) { if (!e.gotFocus()) return; // Focus wurde entfernt if (IDC_LIMITCOUNT == (uint) e.GetControlID()) { ResourceFile RF (g_pDLLName); m_Descript.SetText (ResString (ResID (IDS_COMMLIMITCOUNT, &RF), 250).Addr()); } } // EditFocusChg
ExplorerAboutDlg(HWND hwnd) : super(hwnd) { SetWindowIcon(hwnd, IDI_REACTOS); new FlatButton(hwnd, IDOK); _hfont = CreateFont(20, 0, 0, 0, FW_BOLD, TRUE, 0, 0, 0, 0, 0, 0, 0, TEXT("Sans Serif")); new ColorStatic(hwnd, IDC_ROS_EXPLORER, RGB(32,32,128), 0, _hfont); new HyperlinkCtrl(hwnd, IDC_WWW); FmtString ver_txt(ResString(IDS_EXPLORER_VERSION_STR), (LPCTSTR)ResString(IDS_VERSION_STR)); SetWindowText(GetDlgItem(hwnd, IDC_VERSION_TXT), ver_txt); HWND hwnd_winver = GetDlgItem(hwnd, IDC_WIN_VERSION); SetWindowText(hwnd_winver, get_windows_version_str()); SetWindowFont(hwnd_winver, GetStockFont(DEFAULT_GUI_FONT), FALSE); CenterWindow(hwnd); }
// -------------------------------------------------------------------------------------------- // Reaktion bei Click auf einen Button void CTopoRelRefDlg::ButtonClick (ControlEvt e) { ResourceFile RF (g_pDLLName); switch ((uint) e.GetControlID()) { case IDR_ALLREFOBJECTS: // nachfolgende if-Anweisung ist erforderlich, weil irgendwoher ein unerklärlicher // ButtoClick auf den m_RBttnAllRefs-Button kommt (#WM030131) if (m_RBttnAllRefs.GetState()) { m_SpinCount.Disable(); m_Descript.SetText (ResString (ResID (IDS_COMMALL, &RF), 250).Addr()); } break; case IDR_SOMEREFOBJECTS: m_SpinCount.Enable(); m_RefTypeList.SetFocus(); m_Descript.SetText (ResString (ResID (IDS_COMMSOME, &RF), 250).Addr()); } } // ButtonClick
// -------------------------------------------------------------------------------------------- // Reaktion bei Click in die ComboBox void CTopoRelRefDlg :: ListBoxSel (ControlEvt) { m_RBttnAllRefs.SetState (false); m_RBttnSomeRefs.SetState (true); m_SpinCount.Enable(); ResourceFile RF (g_pDLLName); switch (m_RefTypeList.GetCurrentIndex()) { case 0: m_Descript.SetText (ResString (ResID (IDS_COMMLEAST, &RF), 250).Addr()); break; case 1: m_Descript.SetText (ResString (ResID (IDS_COMMMOST, &RF), 250).Addr()); break; case 2: m_Descript.SetText (ResString (ResID (IDS_COMMEXACT, &RF), 250).Addr()); } }
HRESULT DesktopShellView::DoDesktopContextMenu(int x, int y) { IContextMenu* pcm; HRESULT hr = DesktopFolder()->GetUIObjectOf(_hwnd, 0, NULL, IID_IContextMenu, NULL, (LPVOID*)&pcm); if (SUCCEEDED(hr)) { pcm = _cm_ifs.query_interfaces(pcm); HMENU hmenu = CreatePopupMenu(); if (hmenu) { hr = pcm->QueryContextMenu(hmenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST-1, CMF_NORMAL|CMF_EXPLORE); if (SUCCEEDED(hr)) { AppendMenu(hmenu, MF_SEPARATOR, 0, NULL); AppendMenu(hmenu, 0, FCIDM_SHVIEWLAST-1, ResString(IDS_ABOUT_EXPLORER)); UINT idCmd = TrackPopupMenu(hmenu, TPM_LEFTALIGN|TPM_RETURNCMD|TPM_RIGHTBUTTON, x, y, 0, _hwnd, NULL); _cm_ifs.reset(); if (idCmd == FCIDM_SHVIEWLAST-1) { explorer_about(_hwnd); } else if (idCmd) { CMINVOKECOMMANDINFO cmi; cmi.cbSize = sizeof(CMINVOKECOMMANDINFO); cmi.fMask = 0; cmi.hwnd = _hwnd; cmi.lpVerb = (LPCSTR)(INT_PTR)(idCmd - FCIDM_SHVIEWFIRST); cmi.lpParameters = NULL; cmi.lpDirectory = NULL; cmi.nShow = SW_SHOWNORMAL; cmi.dwHotKey = 0; cmi.hIcon = 0; hr = pcm->InvokeCommand(&cmi); } } else _cm_ifs.reset(); DestroyMenu(hmenu); } pcm->Release(); } return hr; }
LRESULT CMainWindow::DoCommand(int id, LPARAM lParam) { switch (id) { case ID_FILE_OPEN: { if (OpenDialog()) { picWindow1.SetPic(leftpicpath, L"", true); picWindow2.SetPic(rightpicpath, L"", false); if (bOverlap) { picWindow1.SetSecondPic(picWindow2.GetPic(), rightpictitle, rightpicpath); } else { picWindow1.SetSecondPic(); } RECT rect; GetClientRect(*this, &rect); PositionChildren(&rect); picWindow1.FitImageInWindow(); picWindow2.FitImageInWindow(); } } break; case ID_VIEW_IMAGEINFO: { bShowInfo = !bShowInfo; HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bShowInfo ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_IMAGEINFO, uCheck); picWindow1.ShowInfo(bShowInfo); picWindow2.ShowInfo(bShowInfo); picWindow3.ShowInfo(bShowInfo); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bShowInfo ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_IMAGEINFO, (LPARAM)&tbi); } break; case ID_VIEW_OVERLAPIMAGES: { bOverlap = !bOverlap; HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bOverlap ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_OVERLAPIMAGES, uCheck); uCheck |= ((m_BlendType == CPicWindow::BLEND_ALPHA) && bOverlap) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_BLENDALPHA, uCheck); UINT uEnabled = MF_BYCOMMAND; uEnabled |= bOverlap ? MF_ENABLED : MF_DISABLED | MF_GRAYED; EnableMenuItem(hMenu, ID_VIEW_BLENDALPHA, uEnabled); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bOverlap ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_OVERLAPIMAGES, (LPARAM)&tbi); tbi.fsState = ((m_BlendType == CPicWindow::BLEND_ALPHA) && bOverlap) ? TBSTATE_CHECKED : 0; if (bOverlap) tbi.fsState |= TBSTATE_ENABLED; else tbi.fsState = 0; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_BLENDALPHA, (LPARAM)&tbi); if (bOverlap) tbi.fsState = 0; else tbi.fsState = bVertical ? TBSTATE_ENABLED | TBSTATE_CHECKED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_ARRANGEVERTICAL, (LPARAM)&tbi); if (bOverlap) { bLinkedPositions = true; picWindow1.LinkPositions(bLinkedPositions); picWindow2.LinkPositions(bLinkedPositions); tbi.fsState = TBSTATE_CHECKED; } else tbi.fsState = bLinkedPositions ? TBSTATE_ENABLED | TBSTATE_CHECKED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_LINKIMAGESTOGETHER, (LPARAM)&tbi); ShowWindow(picWindow2, bOverlap ? SW_HIDE : SW_SHOW); if (bOverlap) { picWindow1.StopTimer(); picWindow2.StopTimer(); picWindow1.SetSecondPic(picWindow2.GetPic(), rightpictitle, rightpicpath, picWindow2.GetHPos(), picWindow2.GetVPos()); picWindow1.SetBlendAlpha(m_BlendType, 0.5f); } else { picWindow1.SetSecondPic(); } picWindow1.SetOverlapMode(bOverlap); picWindow2.SetOverlapMode(bOverlap); RECT rect; GetClientRect(*this, &rect); PositionChildren(&rect); return 0; } break; case ID_VIEW_BLENDALPHA: { if (m_BlendType == CPicWindow::BLEND_ALPHA) m_BlendType = CPicWindow::BLEND_XOR; else m_BlendType = CPicWindow::BLEND_ALPHA; HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= ((m_BlendType == CPicWindow::BLEND_ALPHA) && bOverlap) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_BLENDALPHA, uCheck); UINT uEnabled = MF_BYCOMMAND; uEnabled |= bOverlap ? MF_ENABLED : MF_DISABLED | MF_GRAYED; EnableMenuItem(hMenu, ID_VIEW_BLENDALPHA, uEnabled); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = ((m_BlendType == CPicWindow::BLEND_ALPHA) && bOverlap) ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_BLENDALPHA, (LPARAM)&tbi); picWindow1.SetBlendAlpha(m_BlendType, picWindow1.GetBlendAlpha()); PositionChildren(); } break; case ID_VIEW_TRANSPARENTCOLOR: { static COLORREF customColors[16] = {0}; CHOOSECOLOR ccDlg = { 0 }; ccDlg.lStructSize = sizeof(ccDlg); ccDlg.hwndOwner = m_hwnd; ccDlg.rgbResult = transparentColor; ccDlg.lpCustColors = customColors; ccDlg.Flags = CC_RGBINIT | CC_FULLOPEN; if(ChooseColor(&ccDlg)) { transparentColor = ccDlg.rgbResult; picWindow1.SetTransparentColor(transparentColor); picWindow2.SetTransparentColor(transparentColor); picWindow3.SetTransparentColor(transparentColor); // The color picker takes the focus and we don't get it back. ::SetFocus(picWindow1); } } break; case ID_VIEW_FITIMAGEWIDTHS: { bFitWidths = !bFitWidths; picWindow1.FitWidths(bFitWidths); picWindow2.FitWidths(bFitWidths); picWindow3.FitWidths(bFitWidths); HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bFitWidths ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_FITIMAGEWIDTHS, uCheck); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bFitWidths ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_FITIMAGEWIDTHS, (LPARAM)&tbi); } break; case ID_VIEW_FITIMAGEHEIGHTS: { bFitHeights = !bFitHeights; picWindow1.FitHeights(bFitHeights); picWindow2.FitHeights(bFitHeights); picWindow3.FitHeights(bFitHeights); HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bFitHeights ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_FITIMAGEHEIGHTS, uCheck); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bFitHeights ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_FITIMAGEHEIGHTS, (LPARAM)&tbi); } break; case ID_VIEW_LINKIMAGESTOGETHER: { bLinkedPositions = !bLinkedPositions; picWindow1.LinkPositions(bLinkedPositions); picWindow2.LinkPositions(bLinkedPositions); picWindow3.LinkPositions(bLinkedPositions); HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bLinkedPositions ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_LINKIMAGESTOGETHER, uCheck); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bLinkedPositions ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_LINKIMAGESTOGETHER, (LPARAM)&tbi); } break; case ID_VIEW_ALPHA0: picWindow1.SetBlendAlpha(m_BlendType, 0.0f); break; case ID_VIEW_ALPHA255: picWindow1.SetBlendAlpha(m_BlendType, 1.0f); break; case ID_VIEW_ALPHA127: picWindow1.SetBlendAlpha(m_BlendType, 0.5f); break; case ID_VIEW_ALPHATOGGLE: picWindow1.ToggleAlpha(); break; case ID_VIEW_FITIMAGESINWINDOW: { picWindow1.FitImageInWindow(); picWindow2.FitImageInWindow(); picWindow3.FitImageInWindow(); } break; case ID_VIEW_ORININALSIZE: { picWindow1.SetZoom(100, false); picWindow2.SetZoom(100, false); picWindow3.SetZoom(100, false); picWindow1.CenterImage(); picWindow2.CenterImage(); picWindow3.CenterImage(); } break; case ID_VIEW_ZOOMIN: { picWindow1.Zoom(true, false); if ((!(bFitWidths || bFitHeights))&&(!bOverlap)) { picWindow2.Zoom(true, false); picWindow3.Zoom(true, false); } } break; case ID_VIEW_ZOOMOUT: { picWindow1.Zoom(false, false); if ((!(bFitWidths || bFitHeights))&&(!bOverlap)) { picWindow2.Zoom(false, false); picWindow3.Zoom(false, false); } } break; case ID_VIEW_ARRANGEVERTICAL: { bVertical = !bVertical; RECT rect; GetClientRect(*this, &rect); if (bVertical) { RECT tbRect; GetWindowRect(hwndTB, &tbRect); LONG tbHeight = tbRect.bottom-tbRect.top-1; if (selectionPaths.size() != 3) { nSplitterPos = (rect.bottom-rect.top)/2+tbHeight; nSplitterPos2 = 0; } else { nSplitterPos = (rect.bottom-rect.top)/3+tbHeight; nSplitterPos2 = (rect.bottom-rect.top)*2/3+tbHeight; } } else { if (selectionPaths.size() != 3) { nSplitterPos = (rect.right-rect.left)/2; nSplitterPos2 = 0; } else { nSplitterPos = (rect.right-rect.left)/3; nSplitterPos2 = (rect.right-rect.left)*2/3; } } HMENU hMenu = GetMenu(*this); UINT uCheck = MF_BYCOMMAND; uCheck |= bVertical ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, ID_VIEW_ARRANGEVERTICAL, uCheck); // change the state of the toolbar button TBBUTTONINFO tbi; tbi.cbSize = sizeof(TBBUTTONINFO); tbi.dwMask = TBIF_STATE; tbi.fsState = bVertical ? TBSTATE_CHECKED | TBSTATE_ENABLED : TBSTATE_ENABLED; SendMessage(hwndTB, TB_SETBUTTONINFO, ID_VIEW_ARRANGEVERTICAL, (LPARAM)&tbi); PositionChildren(&rect); } break; case ID_ABOUT: { CAboutDlg dlg(*this); dlg.DoModal(hInst, IDD_ABOUT, *this); } break; case SELECTBUTTON_ID: { HWND hSource = (HWND)lParam; FileType resolveWith; if (picWindow1 == hSource) resolveWith = FileTypeMine; else if (picWindow2 == hSource) resolveWith = FileTypeBase; else if (picWindow3 == hSource) resolveWith = FileTypeTheirs; else break; if (selectionResult.empty()) { PostQuitMessage(resolveWith); break; } CopyFile(selectionPaths[resolveWith].c_str(), selectionResult.c_str(), FALSE); CAutoBuf projectRoot; if (git_repository_discover(projectRoot, CUnicodeUtils::GetUTF8(selectionResult.c_str()), FALSE, nullptr) < 0 && strstr(projectRoot->ptr, "/.git/")) { PostQuitMessage(resolveWith); break; } CAutoRepository repository(projectRoot->ptr); if (!repository) { PostQuitMessage(resolveWith); break; } CStringA subpath = CUnicodeUtils::GetUTF8(selectionResult.c_str()).Mid((int)strlen(git_repository_workdir(repository))); CAutoIndex index; if (git_repository_index(index.GetPointer(), repository) || (git_index_get_bypath(index, subpath, 1) == nullptr && git_index_get_bypath(index, subpath, 2) == nullptr)) { PostQuitMessage(resolveWith); break; } CString sTemp; sTemp.Format(ResString(hResource, IDS_MARKASRESOLVED), (LPCTSTR)CPathUtils::GetFileNameFromPath(selectionResult.c_str())); if (MessageBox(m_hwnd, sTemp, L"TortoiseGitMerge", MB_YESNO | MB_ICONQUESTION) != IDYES) break; CString cmd; cmd.Format(L"\"%sTortoiseGitProc.exe\" /command:resolve /path:\"%s\" /closeonend:1 /noquestion /skipcheck /silent", (LPCTSTR)CPathUtils::GetAppDirectory(), selectionResult.c_str()); if (resolveMsgWnd) cmd.AppendFormat(L" /resolvemsghwnd:%I64d /resolvemsgwparam:%I64d /resolvemsglparam:%I64d", (__int64)resolveMsgWnd, (__int64)resolveMsgWParam, (__int64)resolveMsgLParam); STARTUPINFO startup = { 0 }; PROCESS_INFORMATION process = { 0 }; startup.cb = sizeof(startup); if (!CreateProcess(nullptr, cmd.GetBuffer(), nullptr, nullptr, FALSE, CREATE_UNICODE_ENVIRONMENT, nullptr, nullptr, &startup, &process)) { cmd.ReleaseBuffer(); PostQuitMessage(resolveWith); break; } cmd.ReleaseBuffer(); AllowSetForegroundWindow(process.dwProcessId); CloseHandle(process.hThread); CloseHandle(process.hProcess); PostQuitMessage(resolveWith); } break; case IDM_EXIT: ::PostQuitMessage(0); return 0; break; default: break; }; return 1; }
CIntOverflow::CIntOverflow (const char *_S) : CIntException (NULL != _S ? _S : ResString(IDS_INTOVERFLOW)) { }
CPrivInstruction::CPrivInstruction (const char *_S) : CWin32Exception (NULL != _S ? _S : ResString(IDS_PRIVINSTRUCTION)) { }
CNoncontinueableException::CNoncontinueableException (const char *_S) : CWin32Exception (NULL != _S ? _S : ResString(IDS_NONCONTINUEABLE)) { }
void QuickLaunchBar::AddShortcuts() { CONTEXT("QuickLaunchBar::AddShortcuts()"); WaitCursor wait; try { TCHAR path[MAX_PATH]; SpecialFolderFSPath app_data(CSIDL_APPDATA, _hwnd); ///@todo perhaps also look into CSIDL_COMMON_APPDATA ? _stprintf(path, TEXT("%s\\")QUICKLAUNCH_FOLDER, (LPCTSTR)app_data); RecursiveCreateDirectory(path); _dir = new ShellDirectory(GetDesktopFolder(), path, _hwnd); _dir->smart_scan(SORT_NAME); // immediatelly extract the shortcut icons for(Entry*entry=_dir->_down; entry; entry=entry->_next) entry->_icon_id = entry->safe_extract_icon(ICF_NORMAL); } catch(COMException&) { return; } ShellFolder desktop_folder; WindowCanvas canvas(_hwnd); COLORREF bk_color = GetSysColor(COLOR_BTNFACE); HBRUSH bk_brush = GetSysColorBrush(COLOR_BTNFACE); AddButton(ID_MINIMIZE_ALL, g_Globals._icon_cache.get_icon(ICID_MINIMIZE).create_bitmap(bk_color, bk_brush, canvas), ResString(IDS_MINIMIZE_ALL), NULL); AddButton(ID_EXPLORE, g_Globals._icon_cache.get_icon(ICID_EXPLORER).create_bitmap(bk_color, bk_brush, canvas), ResString(IDS_TITLE), NULL); TBBUTTON sep = {0, -1, TBSTATE_ENABLED, BTNS_SEP, {0, 0}, 0, 0}; SendMessage(_hwnd, TB_INSERTBUTTON, INT_MAX, (LPARAM)&sep); int cur_desktop = g_Globals._desktops._current_desktop; ResString desktop_fmt(IDS_DESKTOP_NUM); HDC hdc = CreateCompatibleDC(canvas); DWORD size = SendMessage(_hwnd, TB_GETBUTTONSIZE, 0, 0); int cx = LOWORD(size); int cy = HIWORD(size); RECT rect = {0, 0, cx, cy}; RECT textRect = {0, 0, cx-7, cy-7}; for(int i=0; i<DESKTOP_COUNT; ++i) { HBITMAP hbmp = CreateCompatibleBitmap(canvas, cx, cy); HBITMAP hbmp_old = SelectBitmap(hdc, hbmp); FontSelection font(hdc, GetStockFont(ANSI_VAR_FONT)); FmtString num_txt(TEXT("%d"), i+1); TextColor color(hdc, RGB(64,64,64)); BkMode mode(hdc, TRANSPARENT); FillRect(hdc, &rect, GetSysColorBrush(COLOR_BTNFACE)); DrawText(hdc, num_txt, num_txt.length(), &textRect, DT_CENTER|DT_VCENTER|DT_SINGLELINE); SelectBitmap(hdc, hbmp_old); AddButton(ID_SWITCH_DESKTOP_1+i, hbmp, FmtString(desktop_fmt, i+1), NULL, cur_desktop==i?TBSTATE_ENABLED|TBSTATE_PRESSED:TBSTATE_ENABLED); } DeleteDC(hdc); for(Entry*entry=_dir->_down; entry; entry=entry->_next) { // hide files like "desktop.ini" if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) continue; // hide subfolders if (!(entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { HBITMAP hbmp = g_Globals._icon_cache.get_icon(entry->_icon_id).create_bitmap(bk_color, bk_brush, canvas); AddButton(_next_id++, hbmp, entry->_display_name, entry); //entry->_etype==ET_SHELL? desktop_folder.get_name(static_cast<ShellEntry*>(entry)->_pidl): entry->_display_name); } } _btn_dist = LOWORD(SendMessage(_hwnd, TB_GETBUTTONSIZE, 0, 0)); _size = _entries.size() * _btn_dist; SendMessage(GetParent(_hwnd), PM_RESIZE_CHILDREN, 0, 0); }
CWin32UserException::CWin32UserException (UINT uiCode, const char *_S) : m_uiCode(uiCode), CWin32Exception (NULL != _S ? _S : ResString(IDS_USERDEFINED)) { }
// Header --------------------------------------------------------------------- // Ausgabe des Skalierungs-Vektors und des Offsets Bool Header :: OutScaleAndOffset (void) { // nur Ausgabe, wenn noch keine Enträge vorh. ResString HVar (ResID (IDS_KOEFF11), 20); #if _MSC_VER >= 1100 HPROJECT hPr = DEX_GetDataSourceHandle(); HeaderEntryX HD (HVar,hPr); #else HeaderEntryX HD (HVar); #endif if (HD.Status () != HE_INVALID) // Header in Datenquelle vorhanden return True; if ((XMax == XMin) || (YMax == YMin)) { // DEX_Error (RC_HeaderOutScale, EC_NOSCALE); yyerror (IDS_BILDM_ERR); return False; } else { // Erst einmal bei einstelligem Runden belassen ! Später Koord.Systeme unterscheiden XMin = Check (XMin, FALSE); // Koordinaten runden YMin = Check (YMin, FALSE); XMax = Check (XMax, TRUE); YMax = Check (YMax, TRUE); //double Scale = fabs (MaxKoord / (XMax - XMin)); //double ScaleY = fabs (MaxKoord / (YMax - YMin)); //double dMaxKoord = max (abs (XMax), abs (YMax)); // double Scale = fabs (MaxKoord / (XMax - XMin)); // double ScaleY = fabs (MaxKoord / (YMax - YMin)); // Scale = min (Scale, ScaleY); // Scale = 1 / Scale; // inverse Matrix ! // KK991006 double dMaxKoord = (double) MAXKOORD; //double Scale = fabs (dMaxKoord / (XMax - XMin)); //double ScaleY = fabs (dMaxKoord / (YMax - YMin)); //Scale = min (Scale, ScaleY); double Scale = max ( XMax,YMax); double dMulti = 1.0; double dScale = Scale; while ( dMaxKoord >= dScale ) { dMulti = dMulti*CheckKonst; dScale = Scale * dMulti; } Scale = dMulti / CheckKonst; Scale = 1 / Scale; // inverse Matrix ! // Skalierung ausgeben char Buffer [50] = ""; // Header Datenquelle füllen #if _MSC_VER >= 1100 HeaderEntryX HD11 (HVar,hPr); // Koeff11 #else HeaderEntryX HD11 (HVar); // Koeff11 #endif HD11.SetEntryText (DtoA (Scale, Buffer, HeaderDoubleFormat)); if (HD11.WriteBack () != EC_OKAY) return False; HVar = ResString (ResID (IDS_KOEFF12), 20); // Koeff12 #if _MSC_VER >= 1100 HeaderEntryX HD12 (HVar,hPr); #else HeaderEntryX HD12 (HVar); // Koeff12 #endif HD12.SetEntryText ("0.0"); if (HD12.WriteBack () != EC_OKAY) return False; HVar = ResString (ResID (IDS_KOEFF21), 20); // Koeff21 #if _MSC_VER >= 1100 HeaderEntryX HD21 (HVar,hPr); #else HeaderEntryX HD21 (HVar); #endif HD21.SetEntryText ("0.0"); if (HD21.WriteBack () != EC_OKAY) return False; HVar = ResString (ResID (IDS_KOEFF22), 20); // Koeff22 #if _MSC_VER >= 1100 HeaderEntryX HD22 (HVar,hPr); #else HeaderEntryX HD22 (HVar); #endif HD22.SetEntryText (Buffer); if (HD22.WriteBack () != EC_OKAY) return False; // Offset ausgeben HVar = ResString (ResID (IDS_OFFSETX), 20); // XMin #if _MSC_VER >= 1100 HeaderEntryX OX (HVar,hPr); #else HeaderEntryX OX (HVar); #endif OX.SetEntryText (DtoA (XMin, Buffer, HeaderDoubleFormat)); if (OX.WriteBack () != EC_OKAY) return False; HVar = ResString (ResID (IDS_OFFSETY), 20); // YMin #if _MSC_VER >= 1100 HeaderEntryX OY (HVar,hPr); #else HeaderEntryX OY (HVar); #endif OY.SetEntryText (DtoA (YMin, Buffer, HeaderDoubleFormat)); if (OY.WriteBack () != EC_OKAY) return False; // Änderung im Projekt nachziehen ! short iFlag = true; #if _MSC_VER >= 1100 HVar = ResString (ResID (IDS_KOEFF11), 20); HeaderEntryX HD (HVar); if (HD.Status () == HE_INVALID) { // Projektheader nicht vorhanden HeaderEntryX HD11 (HVar); // Koeff11 HD11.SetEntryText (DtoA (Scale, Buffer, HeaderDoubleFormat)); if (HD11.WriteBack () != EC_OKAY) iFlag = false; HVar = ResString (ResID (IDS_KOEFF12), 20); // Koeff12 HeaderEntryX HD12 (HVar); // Koeff12 HD12.SetEntryText ("0.0"); if (HD12.WriteBack () != EC_OKAY) iFlag = false; HVar = ResString (ResID (IDS_KOEFF21), 20); // Koeff21 HeaderEntryX HD21 (HVar); HD21.SetEntryText ("0.0"); if (HD21.WriteBack () != EC_OKAY) iFlag = false; HVar = ResString (ResID (IDS_KOEFF22), 20); // Koeff22 HeaderEntryX HD22 (HVar); HD22.SetEntryText (Buffer); if (HD22.WriteBack () != EC_OKAY) iFlag = false; // Offset ausgeben HVar = ResString (ResID (IDS_OFFSETX), 20); // XMin HeaderEntryX OX (HVar); OX.SetEntryText (DtoA (XMin, Buffer, HeaderDoubleFormat)); if (OX.WriteBack () != EC_OKAY) iFlag = false; HVar = ResString (ResID (IDS_OFFSETY), 20); // YMin HeaderEntryX OY (HVar); OY.SetEntryText (DtoA (YMin, Buffer, HeaderDoubleFormat)); if (OY.WriteBack () != EC_OKAY) iFlag = false; } #endif // hier noch TRIAS benachrichtigen, daß Scaling sich geändert hat DEXN_ReReadHeader (); DEXN_ReScale(); return iFlag; } }
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); UNREFERENCED_PARAMETER(nCmdShow); SetDllDirectory(L""); ::OleInitialize(NULL); // we need some of the common controls INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_LINK_CLASS|ICC_LISTVIEW_CLASSES|ICC_PAGESCROLLER_CLASS |ICC_PROGRESS_CLASS|ICC_STANDARD_CLASSES|ICC_TAB_CLASSES|ICC_TREEVIEW_CLASSES |ICC_UPDOWN_CLASS|ICC_USEREX_CLASSES|ICC_WIN95_CLASSES; InitCommonControlsEx(&icex); apr_initialize(); setlocale(LC_ALL, ""); // to avoid that SASL will look for and load its plugin dlls all around the // system, we set the path here. // Note that SASL doesn't have to be initialized yet for this to work sasl_set_path(SASL_PATH_TYPE_PLUGIN, (LPSTR)(LPCSTR)CUnicodeUtils::StdGetUTF8(CAppUtils::GetAppDirectory()).c_str()); // first create a hidden window which serves as our main window for receiving // the window messages, starts the monitoring thread and handles the icon // in the tray area. MSG msg; msg.wParam = FALSE; HACCEL hAccelTable; hInst = hInstance; INITCOMMONCONTROLSEX used = { sizeof(INITCOMMONCONTROLSEX), ICC_BAR_CLASSES }; InitCommonControlsEx(&used); Snarl::SnarlInterface snarlIface; CCmdLineParser parser(lpCmdLine); if (parser.HasKey(_T("patchfile"))) { hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_CMVIEWER)); // in this case, we start another part of our application, not // the monitoring part. CDiffViewer viewer(hInst); if (parser.HasVal(_T("title"))) viewer.SetTitle(parser.GetVal(_T("title"))); if (viewer.RegisterAndCreateWindow()) { if (viewer.LoadFile(parser.GetVal(_T("patchfile")))) { ::ShowWindow(viewer.GetHWNDEdit(), SW_SHOW); ::SetFocus(viewer.GetHWNDEdit()); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(viewer, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } } } else { //only one instance of this application part allowed g_mutex = ::CreateMutex(NULL, FALSE, APPNAME_MUTEX); if (g_mutex != NULL) { if ((::GetLastError()==ERROR_ALREADY_EXISTS)&&(!parser.HasKey(_T("task")))) { //an instance of this app is already running HWND hWnd = FindWindow(ResString(hInst, IDS_APP_TITLE), NULL); //try finding the running instance of this app if (hWnd) { UINT COMMITMONITOR_SHOWDLGMSG = RegisterWindowMessage(_T("CommitMonitor_ShowDlgMsg")); PostMessage(hWnd, COMMITMONITOR_SHOWDLGMSG ,0 ,0); //open the window of the already running app SetForegroundWindow(hWnd); //set the window to front } apr_terminate(); return FALSE; } } CHiddenWindow hiddenWindow(hInst); hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_COMMITMONITOR)); if (hiddenWindow.RegisterAndCreateWindow()) { if ((snarlIface.GetVersionEx() != Snarl::M_FAILED)&&(Snarl::SnarlInterface::GetSnarlWindow() != NULL)) { std::wstring imgPath = CAppUtils::GetAppDataDir()+L"\\CM.png"; if (CAppUtils::ExtractBinResource(_T("PNG"), IDB_COMMITMONITOR, imgPath)) { // register with Snarl snarlIface.RegisterApp(_T("CommitMonitor"), imgPath.c_str(), imgPath.c_str(), hiddenWindow); snarlIface.RegisterAlert(_T("CommitMonitor"), ALERTTYPE_NEWPROJECTS); snarlIface.RegisterAlert(_T("CommitMonitor"), ALERTTYPE_NEWCOMMITS); snarlIface.RegisterAlert(_T("CommitMonitor"), ALERTTYPE_FAILEDCONNECT); } } if (parser.HasKey(_T("task"))) { hiddenWindow.SetTask(true); } else if (!parser.HasKey(_T("hidden"))) { hiddenWindow.ShowDialog(); } // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hiddenWindow, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } if (!hiddenWindow.StopThread(2000)) { hiddenWindow.RemoveTrayIcon(); TerminateProcess(GetCurrentProcess(), 0); } } ::OleUninitialize(); sasl_done(); apr_terminate(); if ((snarlIface.GetVersionEx() != Snarl::M_FAILED)&&(Snarl::SnarlInterface::GetSnarlWindow() != NULL)) { // unregister with Snarl snarlIface.UnregisterApp(); } return (int) msg.wParam; }