감사합니다.
빌더님....
빌더 님이 쓰신 글 :
: 전에 올린 코드엔 논리적 오류가 있어서 다시 올립니다.
:
:
:
: typedef struct
: {
: HWND hWnd;
: int Left;
: int Top;
: } MAPDATA, *LPMAPDATA;
:
:
: class TGlobalMap : public TObject
: {
: public:
: virtual __fastcall TGlobalMap();
: virtual __fastcall ~TGlobalMap();
:
: void __fastcall AcquireGlobalMap(TForm *MainForm);
:
: private:
: static const TCHAR* const _ID;
: HANDLE _hMap;
: LPMAPDATA _pMapData;
: TForm *_MainForm;
:
: void __fastcall CreateGlobalMap();
: };
:
: const TCHAR* const TGlobalMap::_ID = L"Global/Application/MyMap";
:
: __fastcall TGlobalMap::TGlobalMap()
: {
: _hMap = NULL;
: _pMapData = NULL;
: _MainForm = NULL;
: }
:
: __fastcall TGlobalMap::~TGlobalMap()
: {
: UnmapViewOfFile( _pMapData );
: CloseHandle(_hMap);
: }
:
: void __fastcall TGlobalMap::AcquireGlobalMap(TForm *MainForm)
: {
: _MainForm = MainForm;
: HANDLE hMap = OpenFileMappingW(FILE_MAP_ALL_ACCESS, false, _ID);
: LPMAPDATA pMap;
:
: if( hMap )
: {
: pMap = (LPMAPDATA)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(MAPDATA));
: CloseHandle(hMap);
: if( !pMap ) {
: throw Exception("Fail - MapViewOfFile()");
: }
:
: PostMessage(pMap->hWnd, WM_QUIT, 0, 0);
:
: _MainForm->Left = pMap->Left;
: _MainForm->Top = pMap->Top;
:
: UnmapViewOfFile(pMap);
: CreateGlobalMap();
: return;
: }
:
: CreateGlobalMap();
: }
:
: void __fastcall TGlobalMap::CreateGlobalMap()
: {
: _hMap = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(MAPDATA), _ID);
:
: if( !_hMap ) {
: throw Exception(L"Fail - CreateFileMapping()");
: }
: _pMapData = (LPMAPDATA)MapViewOfFile(_hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(MAPDATA) );
:
: if( !_pMapData ) {
: throw Exception(L"Fail - MapViewOfFile()");;
: }
:
: _pMapData->hWnd = _MainForm->Handle;
: _pMapData->Left = _MainForm->Left;
: _pMapData->Top = _MainForm->Top;
: }
:
: WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
: {
: TGlobalMap *Map;
: try
: {
: try
: {
: Map = new TGlobalMap();
: Application->Initialize();
: Application->MainFormOnTaskBar = true;
: Application->CreateForm(__classid(TForm1), &Form1);
:
: Map->AcquireGlobalMap(Application->MainForm);
:
: Application->Run();
: }
: catch (Exception &exception)
: {
: Application->ShowException(&exception);
: }
: catch (...)
: {
: try
: {
: throw Exception("");
: }
: catch (Exception &exception)
: {
: Application->ShowException(&exception);
: }
: }
: }
: __finally
: {
: delete Map;
: }
: return 0;
: }
:
: |