// 저도 잘은 모르지만 한번 해봤습니다.
//.
//.
// 특정 버튼을 클릭했을 때 MS Word가 실행 중이면
// MS Word에 포거스를 이동하고
// 실행 중이지 않은 경우
// 새로운 MS Word를 실행합니다.
// 기능은 전혀 없습니다.
// 실행은 잘 되는데 버그가 있을 지도 모르니
// 다시 한번 테스트해보시고..
// 도움이 되시길 바라며..

// ClassWizard에서 MS Word type libary로부터 추출 _Application 클래스
// msword8.h
// msword8.cpp
#include "msword8.h"

void CMyComClientView::OnButton1()
{
// TODO: Add your control notification handler code here
CLSID clsid; // Word의 class id
LPUNKNOWN lpUnk       = NULL; // IUnknown Interface
LPDISPATCH lpDispatch = NULL; // IDispatch Interface
HRESULT hr; // Method 리턴값

_Application Word; // MS Word 클래스

hr = CLSIDFromProgID(OLESTR("Word.Application"), &clsid);
if(FAILED(hr)) {
AfxMessageBox("Word Class ID 얻기 실패");
return;
}

// Word 실행 여부 확인
hr = GetActiveObject(clsid, NULL, &lpUnk);
if(SUCCEEDED(hr)) { // Word 실행 중
// Excel의 IDispatch Interface를 얻는다.
HRESULT hr = lpUnk- >QueryInterface(IID_IDispatch, (LPVOID*)&lpDispatch);
if(FAILED(hr)) {
AfxMessageBox("IDispatch Interface 얻기 실패");
return;
}
// lpUnk의 Reference Count를 감소시킨다
lpUnk- >Release();

Word.AttachDispatch(lpDispatch, TRUE); // Word의 IDispatch Interface를 Attach
} else { // 새로운 Word 실행
hr = Word.CreateDispatch(clsid);
if(FAILED(hr)) {
AfxMessageBox("Word를 실행할 수 없음");
return;
}
}

Word.SetVisible(TRUE);
Word.Activate();
}

'KB > MFC/Win32' 카테고리의 다른 글

툴바 리바 색깔 바꾸기  (0) 2004.03.19
윈도우 타이틀 깜빡거리게 하기  (0) 2004.03.19
ListCtrl KnowHow  (0) 2004.03.19
다이얼로그 비활성화 되었을때 그냥 숨기기  (0) 2004.03.19
UDP 소켓 다루기  (3) 2004.03.19

+ Recent posts