// WTLSingleInstance.cpp : main source file for WTLSingleInstance.exe // #include "stdafx.h" #include #include #include #include #include "resource.h" #include "WTLSingleInstanceView.h" #include "aboutdlg.h" #include "MainFrm.h" #include "SingleInstance.H" CMySingleInstanceModule _Module; ///----------------------------------------------------------------------------------------------------------- HDDEDATA CALLBACK CMySingleInstanceMgr::DdeCallback(UINT uType, UINT, HCONV ,HSZ hszTopic, HSZ , HDDEDATA hDdeData, DWORD, DWORD) { UINT nSize =0; LPTSTR psz = 0; if(uType == XTYP_CONNECT) { nSize = DdeQueryString ( _Module.GetInstanceID(), hszTopic, NULL, 0, CP_WINANSI ) + sizeof(TCHAR); psz = new TCHAR[nSize]; DdeQueryString ( _Module.GetInstanceID(), hszTopic, psz, nSize, CP_WINANSI ); if (lstrcmp ( psz, _T("Single_Instance_Topic") ) == 0) { ::SetForegroundWindow( _Module.GetAppWnd() ); } delete psz;psz = 0; return (HDDEDATA)DDE_FACK; } else if(uType == XTYP_EXECUTE) { nSize = DdeGetData(hDdeData,0,0,0) + sizeof(TCHAR); psz = new TCHAR[nSize]; DdeGetData (hDdeData, (unsigned char*)psz, nSize,0); _Module.InvokeCmdLine(psz); delete psz;psz = 0; } return (HDDEDATA)0; } ///----------------------------------------------------------------------------------------------------------- int Run(LPTSTR lpstrCmdLine = NULL, int nCmdShow = SW_SHOWDEFAULT) { CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); CMainFrame wndMain; if(wndMain.CreateEx() == NULL) { ATLTRACE(_T("Main window creation failed!\n")); return 0; } wndMain.ShowWindow(nCmdShow); _Module.SetAppWnd(wndMain.m_hWnd); ///******* //send the cmd line to the mainframe wndMain.SendMessage(c_Msg_NewDocument,0,(LPARAM)lpstrCmdLine); int nRet = theLoop.Run(); _Module.RemoveMessageLoop(); return nRet; } ///----------------------------------------------------------------------------------------------------------- int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow) { _Module.Init(lpstrCmdLine,0, hInstance);///******* if(_Module.IsAnInstanceRunning())///******* { _Module.Term(); return 0L; } #if (_WIN32_IE >= 0x0300) INITCOMMONCONTROLSEX iccx; iccx.dwSize = sizeof(iccx); iccx.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES; BOOL bRet = ::InitCommonControlsEx(&iccx); bRet; ATLASSERT(bRet); #else ::InitCommonControls(); #endif AtlAxWinInit(); int nRet = Run(lpstrCmdLine, nCmdShow); _Module.Term(); return nRet; } ///-----------------------------------------------------------------------------------------------------------