-
MFC 메인 다이얼로그 실행하자마자 숨기기
mfc 다이얼로그 기반 프로젝트에서 메인 다이얼로그를 실행하는 순간부터 숨기고 싶을 때가 있다. OnInitDialog에서 SHOW_HIDE로 숨기면, 깜빡이면서 다이얼로그가 잠깐 나타났다가 숨겨지게 된다. 그래서 그 방법 보다는 WM_WINDOWPOSCHANGING 메시지를 추가하여 다이얼로그를 숨기는 방법이 좋다. 헤더파일(.h) public: afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos); 소스파일(.cpp) BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_WM_WINDOWPOSCHANGING() END_MESSAGE_MAP() void CMyDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos) { lpwndpos->flags &= ~SWP_SHOWWINDOW; CDialog::OnWindowPosChanging(lpwndpos); }
-
MFC 다이얼로그 선언되지 않은 식별자입니다
mfc 다이얼로그 리소스를 추가하고, 클래스 파일을 생성했을 때, 다음과 같은 에러를 만나는 경우가 있다. 식별자 "IDD_XXXXX"이(가) 정의되어 있지 않습니다. 'IDD_XXXXX' : 선언되지 않은 식별자입니다. 이런 경우, 다이얼로그가 정의되어있는 resource 헤더를 추가해주면 해결된다. 소스에 다음 헤더를 추가해주자. #include "resource.h"
-
MFC Control 배경(background) color 투명하게 바꾸기
mfc 다이얼로그는 기본적으로 바탕색이 회색입니다. 그런데 UI를 꾸미다보면 흰색 테두리가 있는 이미지를 자연스럽게 다이얼로그에 입히고 싶거나 할 때 다이얼로그 색을 흰색 바탕으로 해줄 수 있습니다. 헤더파일(.h) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 소스파일(.cpp) BEGIN_MESSAGE_MAP(CLoadingDlg, CDialog) ON_WM_CTLCOLOR() END_MESSAGE_MAP() HBRUSH CLoadingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); UINT nID = pWnd->GetDlgCtrlID(); switch (nID) { case IDC_STATIC_LOADING: case IDC_PIC_LOADING: pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH)GetStockObject(NULL_BRUSH);; break; } return hbr; }
-
Unicode환경에서의 CString to LPWSTR
Unicode환경에서 CString을 LPWSTR로 형변환 하는 방법입니다. LPWSTR ConvertToUnicode(CString cString) { int nBufSize = cString.GetLength() + 1; LPWSTR lpws = new wchar_t[nBufSize]; if (lpws != NULL) { #if defined(_UNICODE) lstrcpy(lpws, cString); // If Unicode is defined, just copy the string. #else // mbstowcs() would work here as well... MultiByteToWideChar(CP_ACP, 0, cString, nBufSize, lpws, nBufSize * 2); #endif // _UNICODE } return lpws; // Caller must delete! }
-
MFC 다이얼로그 아이콘 변경 및 추가
MFC 다이얼로그의 아이콘을 변경하고 추가하는 방법입니다. Source Code BOOL TestApp::OnInitDialog() { HICON hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_MAIN_ICON)); //icon 변경 this->SetIcon(hIcon, FALSE); //icon 셋팅 }
-
MFC 프로그램 중복 실행 방지
MFC 프로그램의 중복 실행을 방지하는 방법입니다. Dialog base 프로젝트도 [프로젝트명].cpp 파일의 InitInstance() 에 코드를 삽입해 줍니다. Source Code BOOL CTestApp::InitInstance() { HANDLE hMutex = NULL; hMutex = CreateMutex( NULL,TRUE, _T("mtx_running_test_app")); if ( GetLastError() == ERROR_ALREADY_EXISTS ) { AfxMessageBox(_T("프로그램이 이미 실행 중입니다.")); } }
-
MFC 윈도우 최상위에 나타나도록 설정
MFC 윈도우를 최상위에 나타나도록 설정하는 방법입니다. ::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST , 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
-
[링크] Visual C++ 버전별 재배포 패키지 런타임 다운로드
Visual C++ 버전별 재배포 패키지 런타임 다운로드에 관련하여 잘 정리된 사이트입니다. http://zypper.tistory.com/85
-
[스크랩] MFC 트레이 아이콘 잔상 없애기
출처 : http://cpueblo.com/programming/api/contents/197.html Source Code struct TRAYDATA { HWND hwnd; UINT uID; UINT uCallbackMessage; DWORD Reserved[2]; HICON hIcon; }; static HWND FindTrayToolbarWindow() { HWND hWnd_ToolbarWindow32 = NULL; HWND hWnd_ShellTrayWnd; hWnd_ShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL); if (hWnd_ShellTrayWnd) { HWND hWnd_TrayNotifyWnd = ::FindWindowEx(hWnd_ShellTrayWnd, NULL, _T("TrayNotifyWnd"), NULL); if (hWnd_TrayNotifyWnd) { HWND hWnd_SysPager = ::FindWindowEx(hWnd_TrayNotifyWnd, NULL, _T("SysPager"), NULL);// WinXP // WinXP 에서는 SysPager 까지 추적 if (hWnd_SysPager) hWnd_ToolbarWindow32 = ::FindWindowEx(hWnd_SysPager, NULL, _T("ToolbarWindow32"), NULL); // Win2000 일 경우에는 SysPager 가 없이...
-
[스크랩] MFC 프로그램 안전하게 종료하는 방법
출처 : https://blog.naver.com/ziralist/8325535 응용 프로그램을 종료한다는 의미는 해당 프로그램의 가장 기본이 되는 윈도우를 종료 시키는 것과 같다. 따라서 MFC로 작성한 응용 프로그램의 기본 골격이 되는 윈도우는 CFrameWnd(CWnd, CDialog) 계열의 클래스일 것이고 이 윈도우를 종료 시키면 응용 프로그램은 종료하게 된다. 기본 골격이 되는 윈도우를 종료하는 가장 일반적인 방법은 해당 윈도우에 WM_CLOSE 메시지를 전달하면 된다. 이 메시지가 Main Frame 윈도우에 전달되면 처리기가 OnClose 함수를 호출하게 되고 OnClose함수는 저장하지 않은 작업을 저장하도록 요구하며 프로그램을 종료 시킨다. 아래의 코드는...
-
[스크랩]MFC에서 UI Thread를 이용한 Dialog 호출 방법
http://aladdin07.blog.me/150074142378 1.목적 메인 프로그램에서 메뉴 항목을 선택하면 별도의 Dialog가 생성되어 거기서 정보를 입력 받는다. 단, 메인프로그램과 생성된 Dialog는 상호 독립적으로 구동되어야 한다. (즉, 메인프로그램에서 DoModal()로 Dialog를 구동시키지 않고 별도 Thread로 구동 시켜야 한다) 2.방법 CWinThread Class를 활용한다. Class Wizard를 사용하여 CWinThread를 Base Class로하는 Class(CDlgThread)를 정의한다. Header File(DlgThread.h)에는 DECLARE_DYNCREATE(CDlgThread); Source File(DlgThread.cpp)에는 IMPLEMENT_DYNCREATE(CDlgThread ,CWinThread) ClassWizard에 의해 자동으로 추가됩니다. DlgThread.h를 수정한다. protected로 정의된 Constructor DlgThread()와 Deconstructor ~DlgThread()를 public으로 바꾸어 준다. (이유는 해보면 안다) public: DlgThread(); ~DlgThread(); Dialog...