CComboBoxEx DarkKaiser, 2010년 3월 30일2023년 9월 4일 콤보박스의 각 항목에 이미지가 들어가도록 하는 코드 // .h CImageList m_ImgList; CComboBoxEx m_ComboEx; // .cpp CBitmap bmp; bmp.LoadBitmap(IDB_IMAGELIST); m_ImgList.Create(16, 16, ILC_COLOR24, 7, 7); m_ImgList.Add(&bmp, RGB(255, 0, 0)); m_ComboEx.SetImageList(&m_ImgList); CString strTmp; COMBOBOXEXITEM cbi; ::ZeroMemory(&cbi, sizeof(cbi)); cbi.mask = CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_TEXT; for (int i = 0; i < 7; i++) { strTmp.Format("%dth Item", i); Continue Reading
AlphaBlend() 함수를 이용한 반투명 처리 DarkKaiser, 2010년 3월 30일2023년 9월 4일 //바탕 이미지 출력 CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap bmpBack; bmpBack.LoadBitmap(IDB_BKIMG2); CBitmap *pOldBackBitmap = (CBitmap*) MemDC.SelectObject(&bmpBack); BITMAP backBitMap; bmpBack.GetBitmap(&backBitMap); pDC-BitBlt(0, 0, backBitMap.bmWidth, backBitMap.bmHeight, &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBackBitmap); MemDC.DeleteDC(); //아이콘, 선 출력 CDC dcMem; dcMem.CreateCompatibleDC(pDC); pOldBackBitmap = (CBitmap*) dcMem.SelectObject(&bmpBack); HICON hIcon; hIcon = AfxGetApp()-LoadIcon(MAKEINTRESOURCE(IDI_EQICON)); for(int i = 0 ; i Continue Reading
TransparentBlt() DarkKaiser, 2010년 3월 30일2023년 9월 3일 BOOL TransparentBlt( HDC hdcDest, //DC 핸들러 int nXOriginDest, //비트맵이 그려질 X좌표 int nYOriginDest, //비트맵이 그려질 Y좌표 int nWidthDest, //출력될 비트맵의 가로 길이 int hHeightDest, //출력될 비트맵의 세로 길이 HDC hdcSrc, //비트맵을 미리 그려놓을 DC 핸들 int nXOriginSrc, // int nYOriginSrc, // int nWidthSrc, // int nHeightSrc, // UINT crTransparent //투명화 Continue Reading
_TrackMouseEvent DarkKaiser, 2010년 3월 30일2023년 9월 5일 – SetCapture() 함수처럼 마우스 이벤트를 추적할 수 있도록 해줍니다. 그러나 동작 원리를 놓고 보면 두 함수는 너무나 다른 함수입니다. 마우스가 자신의 윈도우 영역을 벗어났음을 감지하는 방법에서, SetCapture() 함수는 응용 프로그램 자신이 직접 마우스를 점유하고 계속 마우스 메시지를 수신하여 경계를 벗어났는지 검사하지만, _TrackMouseEvent() 함수는 운영체제에 자신의 윈도우를 등록하여 마우스가 자신의 영역을 Continue Reading
CTab을 이용한 탭 구현 방법 DarkKaiser, 2010년 3월 27일2023년 9월 6일 – 대화상자 기반 프로젝트라고 가정… 1. 도구상자에서 탭 컨트롤을 대화상자에 추가한 후, 컨트롤 변수로 생성한다. CTabCtrl m_Tab; 2. 탭 컨트롤을 초기화한다. m_Tab.InsertItem(0, _T("TAB1")); m_Tab.InsertItem(1, _T("TAB2")); 3. 탭 컨트롤 안에 들어갈 실제 탭 페이지를 추가한다. 탭 페이지는 새로운 대화상자를 삽입하고 속성을 Border(NONE), Style(Child)로 설정한다. 4. 추가한 탭 페이지의 클래스를 생성한 후, Continue Reading
투명 PNG 파일 로드하고 화면에 그리기… DarkKaiser, 2010년 3월 3일2023년 9월 4일 GDI+를 이용하여 PNG 파일을 로드하고 화면에 그리는 방법… // PNG 드로잉 Graphics G2(dc.GetSafeHdc()); G2.DrawImage( m_bitmap, 60, 60 , m_bitmap-GetWidth(), m_bitmap-GetHeight() ); // PNG 파일 로드 Bitmap* Cpng_test1Dlg::PngFromResource(IN HINSTANCE hInst, IN const LPTSTR pName, IN const LPTSTR pType ) { Bitmap* bitmap = NULL; HRSRC hResource = ::FindResource(hInst, pName, Continue Reading
Microsoft Visual C++ 2005 & 2008 재배포 가능 패키지 다운로드 페이지… DarkKaiser, 2009년 9월 27일2023년 9월 4일 Microsoft Visual C++ 2005 재배포 가능 패키지(x86) Microsoft Visual C++ 2005 재배포 가능 패키지(x64) Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x86) Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x64) Microsoft Visual C++ 2008 재배포 가능 패키지(x86) Microsoft Visual C++ 2008 재배포 가능 패키지(x64) Microsoft Visual C++ 2008 SP1 재배포 Continue Reading
Visual C++에서 프로젝트 작성시 ‘자동화 서버는 객체를 작성할 수 없습니다.’ 에러 발생시 해결책.. DarkKaiser, 2009년 9월 17일2023년 9월 6일 출처 : http://esperanca.kr/tag/자동화%20서버는%20개체를%20작성할%20수%20없습니다. Visual Studio 2003.NET, Visual Studio 9.0 Express Edition 등의 개발환경에서 ‘자동화 서버는 객체를 작성할 수 없습니다.’라는 에러가 프로젝트 작성시 뜨고는 한다. 기본적인 함수와 주석이 포함되어 있는 스크립트인데 간혹 환경이 다른 운영체제의 애플리케이션을 개발하곤 할 때 일어난다. 필자는 XP인데 스크립트 파일이 깔려있지 않아서 문제를 겪었다. 해결책은 다음과 같다. Continue Reading
ChangeWindowMessageFilter – Vista 에서 메시지(WM_COPYDATA등) 보내기 DarkKaiser, 2009년 9월 12일2023년 9월 6일 비스타에서는 UAC가 동작하고 있을때 권한이 낮은 어플리케이션에서 높은 어플리케이션으로 메시지가 전달이 안된다. 여러 사이트 검색결과 ChangeWindowMessageFilter를 이용하면 된다는 것을 알게되었다. typedef BOOL (WINAPI *CHANGEWINDOWMESSAGEFILTER)( UINT message, DWORD dwFlag ); 를 선언부에 선언하고, HANDLE popapi; CHANGEWINDOWMESSAGEFILTER ChangeWindowMessageFilter; popapi = LoadLibrary("USER32.DLL"); ChangeWindowMessageFilter=(CHANGEWINDOWMESSAGEFILTER)GetProcAddress((HINSTANCE)popapi,"ChangeWindowMessageFilter"); ChangeWindowMessageFilter(WM_COPYDATA,1); 하면 됩니다. ChangeWindowMessageFilter에서 MSGFLT_ADD를 사용하면 해당메세지를 받아들이게 되고,REMOVE를 Continue Reading
__SetForegroundWindow DarkKaiser, 2009년 8월 24일2023년 9월 5일 출처 : Application Hacking ::SetForegroundWindow(), ::SetFocus()아 같은 API를 호출해서 프로그램 상에서 간단하게 상위 윈도우를 변경하거나 입력 포커스를 지정할 수 있지만, 이는 사용자가 마우스로 윈도우를 선택하거나 Alt+TAB, Alt+ESC를 입력해서 상위 윈도우를 지정하는 경우와는 다르게 동작한다.::SetForegroundWindow(), ::SetFocus()등의 API를 호출하는 스레드가 현재 입력을 처리하고 있는 상위 스레드가 아니라면, API에 의해서 설정된 윈도우는 Continue Reading