본문 바로가기

Application Dev./C++/MFC

(19)
FindWindowEx() 함수로 찾은 버튼에 클릭 메세지 보내기 FindWindow(), FindWindowEx() 함수로 다른 프로그램의 창을 제어 할 경우, 버튼을 클릭해줘야 할 때에. -> FindWindowEx 에서 반환받은 HWND 변수로 BM_CLICK 메시지를 보내면 해결됩니다. ex) HWND hWndMsgBox = NULL; HWND hWndButton1 = NULL, hWndButton2 = NULL; hWndMsgBox = FindWindow("#32770", NULL); hWndButton1 = FindWindowEx(hWndMsgBox, NULL, "Button", "확인"); hWndButton2 = FindWindowEx(hWndMsgBox, hWndButton1, "Button", "취소"); SendMessage(hWndButton1, ..
유니코드 환경에서의 함수들 사용 atoi, _atoi_l, _wtoi, _wtoi_l atof, _atof_l, _wtof, _wtof_l sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l 출처 : MSDN
레지스트리에 등록된 시작프로그램 가져오기 BOOL CLXStartupManagerDlg::GetStartupListIn() { HKEY hKey; long lSubResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // HKEY_CURRENT_USER _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_READ, &hKey); if(lSubResult != ERROR_SUCCESS) { RegCloseKey(hKey); AfxMessageBox(_T("Key Open Error")); return FALSE; } DWORD dwIndex = 0; int nIndex = 0; CString SubName = _T(""); CString SubValue = _T(..
SDI, MDI 기반의 프로젝트에서 타이틀바 내용 변경하기(CREATESTRUCT structure) BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style &= ~FWS_ADDTOTITLE ; cs.lpszName = "Maestro Server Ver1.0"; // SetWindowText("Maestro Server Ver1.0") 대체 가능 // 단, OnCreate() 에서의 호출을 추천 // 덤으로 cs.cx, cx.cy 등을 이용하면 프로그램 틀의 크기 조정도 가능하다. return TRUE; }
CMainFrame 사용하기 CMainFrame *pMainFrm= (CMainFrame *) AfxGetMainWnd(); AfxGetMainWnd() 함수는 윈도우의 포인터를 얻어오는 함수이다. CWnd* 값을 가져오는데 이는 윈도우의 멤버 변수인 m_pMainWnd의 값을 리턴한다. CMainFrame 에서의 Doc , View 로드 방법으로는 GetActiveDocument(), CGetActiveView() 등이 있다, 리턴 값은 각각 CDocument , CView 의 포인터 형이며 타입 캐스팅으로 원하는 뷰를 사용할 수 있다.
enum 사용하기 [출처] [C/C++] enum, 보다 나은 enum|작성자 esstory #define 과 얼핏 비슷해 보이지만, 비슷한 유형별의 데이터를 표현하기 위해 반드시 필요한 C++의 필수 타입인 enum 의 몇 가지 재미있고 유용한 팁을 소개합니다. 1. namespace 와 결합하기 일반적으로 enum 을 이용하여 타입이름을 짓기란 쉬운 일이 아닙니다. 만약 리스트에 필요한 정렬 기준을 enum 으로 표현한다면 아래 정도가 됩니다. enum SORT_LIST { SORT_DATE, // 날짜순 SORT_NAME, // 이름 SORT_CONTENT, // 내용 S0RT_ETC, // 기타 }; bool SortSomeData(SORT_LIST SortList) { switch (SortList) { case..
다이얼로그 기반의 프로그램에서 Enter키, Escape키 막기 [출처] [MFC]다이얼로그 기반의 프로그램에서 Enter 키 안 먹히기|작성자 낭만오리 MFC에서 다이얼로그(Dialog) 베이스에서 프로그래밍 할 경우, 프로그램을 실행했을 때, 엔터(Enter) 키를 누르게 되면 CDialog::OnOK() 함수가 자동적으로 호출 되어서 Dialog가 자동적으로 닫히게 된다. 이런경우를 막기 위해서는 여러방법이 있는데, 그 중에 일반적으로 많이 쓰이는 것이 CDialog::PreTranslateMessage(MSG* pMsg); 함수를 오버라이딩(재정의) 한 후, 엔터키가 눌렸다는 메시지를 가로채서, 실행하지 않게 하면된다. 마찬가지로, ESC 키가 눌렸을 때는 CDialog::OnCancel() 함수가 자동적으로 호출되어서 Dialog가 자동적으로 닫히게 되는데,..
WM_CLOSE, WM_DESTROY_WM_CREATE 의 정확한 발생지점 WM_CREATE : 윈도우 클래스 구조체를 메모리에 실제 할당할 때, 즉 CreatWindow() 호출시에 발생 WM_CLOSE : 윈도우 클래스 구조체를 해제하기 전에 발생 WM_DESTROY : 윈도우 클래스 구조체를 해제한 후 발생 종료 후 그리기 관련 작업은 WM_CLOSE에서 처리하고 (DC는 윈도우에 종속적이므로 윈도우가 사라지면 얻을 수 없다) 데이터 관련 작업은 WM_DESTROY에서 처리