매핑모드 사용하여 확대/축소 구현하기 DarkKaiser, 2007년 7월 1일2023년 9월 6일 이미지 자체를 크거나 작게 하려면 StretchBlt를 사용하지만 이미지 편집 창을 확대/축소하게 될 때는 편집된 선이나 글자는 크기가 변하지 않기 때문에 확대나 축소한 상태에서는 편집을 할 수 없게 됩니다. “그림판” 에서와 같이 확대또는 축소된 상태에서도 편집이 가능하도록 하려면 ?OnPrepareDC를 선언한 다음과 같이 작성하면 됩니다. void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { Continue Reading
트레이아이콘(Tray Icon) 사라지는 버그 막기 DarkKaiser, 2007년 7월 1일2023년 9월 5일 요즘 나오는 프로그램에서는 대부분 ?TrayIcon을 제공합니다. 단순히 프로그램 리스트(태스크 바)에 나오는 것보다는, ?TrayIcon이 사용자에게 보다 더 편리한 UI를 제공하기 때문입니다. 그런데, 익스플로어(인터넷 익스플로어가 아닙니다.)의 버그 때문에 <그림 1>과 같이 종종 TrayIcon이 Tray에서 사라지는 경우가 있습니다. 하지만, 몇몇의 프로그램은 사라지지 않고 계속 남아있는 경우도 볼 수 있습니다. <그림 1 Continue Reading
FormView 실행시 최대화 DarkKaiser, 2007년 7월 1일2023년 9월 5일 CMainFrame에서 ClassWizard 로 가상함수 ActivateFrame(int nCmdShow) 추가 void CMainFrame::ActivateFrame(int nCmdShow) { /* TODO: Add your specialized code here and/or call the baseclass */ nCmdShow=SW_MAXIMIZE; <-- 코드추가부분. CFrameWnd::ActivateFrame(nCmdShow); } Continue Reading
툴바에서 256 이상의 컬러 사용 DarkKaiser, 2007년 7월 1일2023년 9월 4일 기존의 리소스는 그대로 두고 ToolBar에 사용할 256색 이상의 Bitmap Image List를 하나 만듬니다. 그리고 나서 CToolBarCtrl의 SetImageList(), SetHotImageList(), SetDisabledImageList()를 이용하면 간단히 256이상의 ToolBar를 만들 수 있습니다. 예제를 참고하세요. void CToolBar256::SetBitmap(UINT nIDResource, CSize ImageSize, UINT nButton, COLORREF colMask) { CImageList ToolBarImageList; CBitmap ToolBarBitmap; ToolBarBitmap.LoadBitmap(nIDResource); ToolBarImageList.Create(ImageSize.cx, ImageSize.cy, ILC_MASK | ILC_COLORDDB, nButton, 0); Continue Reading
시스템 에러 메시지 자동으로 알아내기 DarkKaiser, 2007년 7월 1일2023년 9월 5일 Win32 함수 호출이 실패할 때에는 아마 주로 GetLastError()로 오류 번호를 얻고 그 번호를 이용해서 구체적인 오류 메시지를 알아내곤 할 것이다. 그러나 그렇게 하지 말고 그냥 디버거의 감시(watch) 창에 @err, hr 을 넣어보라. 그러면 오류 메시지가 직접 나타나게 될 것이다. Continue Reading
콘솔에서 프로젝트 파일 빌드 DarkKaiser, 2007년 7월 1일2023년 9월 4일 VC++ 6.0 > msdev.com Test.dsw /MAKE "Test - Win32 Release" /REBUILD vc++ 7.0 이상 > devenv test.sln /rebuild release Continue Reading
VC++6에서 최신 MSDN 사용하기 DarkKaiser, 2007년 7월 1일2023년 9월 4일 최신 버전의 MSDN을 VC6의 내장 도움말(키워드에서 F1 눌렀을 때 자동으로 해당 주제의 도움말이 나타나는 방식)로 사용하는 방법입니다. 레퍼런스 : Integrate the latest MSDN with VC6 and Hook functions of COM(http://www.codeproject.com/macro/VSNetHelp.asp ) (*** 반드시 PSDK가 설치되어 있어야 합니다. ***) 1) 아래의 VC6용 애드인 파일을 다운로드 받습니다. 2) VC6용 애드인 Continue Reading
디버그 Watch창에서 vector 내용 확인하기 DarkKaiser, 2007년 7월 1일2023년 9월 4일 STL 를 사용하다보면 어려운 점 중에 하나가 그 내용을 확인하기가 쉽지 않다는 점입니다. 배열을 사용하면 디버그 watch 창에 그 내용물이 보기 쉽게 표시되는데 배열의 STL 대응인 std::vector 를 사용하면 무슨 내용이 vector 저장되어 있는지 디버깅 시 확인하기가 쉽지 않습니다. 다음과 같이 watch 창에 입력하면 std::vector 의 내용을 확인할 수 있습니다. Continue Reading
문서화를 자동으로 XML 문서 주석 DarkKaiser, 2007년 7월 1일2023년 9월 6일 [ 서우석 2005/11/22] 여러분은 얼마나 많은 주석을 작성합니까? 그리고 주석을 어떤 용도로 사용하십니까? 주석을 작성해야 하는지, 또는 말아야 하는지에 대한 논의는 상당히 오랜 시간 동안 지속되어 왔으면서도 여전히 결론이 내려질 가능성이 그렇게 많지 않아 보이다. 그 옛날 소크라테스가 제자들에게 주석을 작성하는 것이 옳은가에 대한 질문을 했을 때, 한 제자는 코드의 Continue Reading
IWebBrowser2와 IHTMLDocument2의 상호변환 DarkKaiser, 2007년 6월 30일2023년 9월 5일 1. IWebBrowser2 에서 IHTMLDocument2 인터페이스 구하기 IWebBrowser2 *m_pWebFromUnknown; IWebBrowser2 *m_pWebFromDoc; STDMETHODIMP CTestObj::SetSite( IUnknown *pUnkSite ) { IOleClientSite *pClientSite; HRESULT hr; hr = pUnkSite-QueryInterface( IID_IOleClientSite, (LPVOID *)&pClientSite ); if ( FAILED( hr ) ) return S_OK; IOleContainer *pContainer; hr = pClientSite-GetContainer( &pContainer ); pClientSite-Release(); if ( FAILED( hr Continue Reading