본문 바로가기

old drawer/C, C++, MFC

[MFC/C++] SHGetFileInfo 를 이용한 파일 속성 파악 SHGetFileInfo는 매우 유용한 API다 어찌나 친절한 지 File의 정보를 몽땅 건내준다 (심지어 아이콘 정보까지 말이다) 여기서는 간단하게 파일 속성을 알기 위한 용도로 사용했다 CString strDrive; SHFILEINFO shInfo; .... SHGetFileInfo(strDrive,0,&shInfo,sizeof(SHFILEINFO),SHGFI_TYPENAME | SHGFI_ATTRIBUTES); .... if ( !(shInfo.dwAttributes & SFGAO_HIDDEN) ) // 숨김파일은 제외한다 코딩 여기서 붉은색 플래그는 #define SHGFI_ICON 0x000000100 // get icon #define SHGFI_DISPLAYNAME 0x000000200 /.. 더보기
[MFC/C++] 레지스트리 값 쓰기/읽기 http://sbrich.tistory.com/1771 더보기
[C/C++] 레지스트리 사용법 아래는 간단히 정리된 레지스트리 사용법입니다. MYAPP부분에 프로그램이름을 넣고 사용하시면 간단할 것입니다. #define REGISTRY_ADDRESS HKEY_LOCAL_MACHINE\SOFTWARE\MYAPP void m_RegWrite(const char* regItemName, const char* value) { HKEY m_hRegsKey; RegCreateKey(HKEY_CURRENT_USER, REGISTRY_ADDRESS, &m_hRegsKey); RegSetValueEx(m_hRegsKey, // subkey handle regItemName, // value name 0, // must be zero REG_SZ, // value type canbe REG_DWORD, (LPBYT.. 더보기
[MFC] 파일 복사 함수 CopyFile(원본 파일 경로, 결과 파일 결로, 덮어쓰기 여부); 덮어쓰기여부는 TRUE는 fail, FALSE는 덮어쓰기 더보기
[MFC] MFC로 외부프로그램 실행 해보기! ShellExecute() MFC로 외부프로그램 실행 해보기! MFC ShellExecute 함수를 이용하여 실행 하는 프로그램 만드는 예제입니다. 위 스냅샷은 실행 결과입니다. 아무파일이나 선택하구 실행하기 버튼을 누르면 그에 맞는 프로그램으로 실행이됩니다. 결과가 궁금하시면 첨부 file을 직접 down 받아 실행해보시기 바랍니다. ShellExecute 함수원형 HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); 윈도우 탐색기에서 해당 파일을 더블 클릭한 것과 완벽하게 일치하는 동작을 하는 함수 Hwnd : 부모 윈도우의 핸들이며, 이 값이 NULL이므로 부모 윈도우는 바탕화면이 됩.. 더보기
[Win32API] 외부 프로그램 실행 함수, WinExec() [Win32API] 외부 프로그램 실행 함수, WinExec() WinExec("cmd.exe", SW_SHOW); SW_SHOW 또는 SW_HIDE 와 같이 상태설정(uCmdShow), Display options... (MSDN 참조) API, MFC에서 프로그램에서 윈도우에서 도스 명령 실행 후(WinExec), 명령프롬프트 창이 바로 닫혀지는 경우에는 "cmd.exe /K" 사용. [Source Code] WinExec("cmd.exe /K netstat -an", SW_SHOW); (cmd.exe /? 참조) 출처:[Win32API] 외부 프로그램 실행 함수, WinExec() 더보기
[C++] 프로그램 실행파일의 경로 가져오기 ini 파일을 읽어들여 프로그램을 셋팅하거나 할 때, 간혹 실행파일의 경로가 필요해질때가 있다. 이런 경우 아래의 소스를 이용하면 실행파일명을 제외한 나머지 경로를 구해올 수 있다. //++++++ 실행파일의 경로를 Get ++++++// CString strFolderPath; // 현재 프로그램의 실행 파일이 있는 폴더명을 추출함 ::GetModuleFileName(NULL, strFolderPath.GetBuffer(MAX_PATH), MAX_PATH); strFolderPath.ReleaseBuffer(); if (strFolderPath.Find('\\') != -1) { for (int i = strFolderPath.GetLength() - 1; i >= 0; i--) { TCHAR ch =.. 더보기
[MFC] MFC COleDateTime 이용해 시스템 날짜 시간 얻기 1. COleDateTime는? COleDateTime는 유동적으로 변하는 시스템의 날짜와 시간의 값을 얻거나 수정할수 있다. 2. 사용 예제 1) 현재 시스템의 년/월/일/시/분/초 를 얻어 오는 예제 COleDateTime의 객체를 생성한다. static COleDateTime WINAPI GetCurrentTime( ) throw( ); 현재 날짜/시간을 리턴해 주는 메서드를 이용해 mdiStart를 초기화 해준다. 년/월/일/시/분/초 를 출력해서 값을 확인해 본다. 2) 요일 알아오기. int GetDayOfWeek( ) const throw( ); 메서드를 이용해서 요일을 알아 올수 있다. 보면 알겠지만 반환타입이 int이다. 1~7(일~월)을 리턴한다. 3) 날짜/시간 수정하기 int Set.. 더보기
[MFC] F1 도움말 기능 비활성화 MFC로 개발시, 빌드된 프로그램에서 F1을 누르면 도움말 기능이 실행된다. 문제는 CWinApp 클래스에 기본으로 포함되어있어 프로그램이 도움말 기능을 지원하지 않더라도 Help 파일을 찾으려는 메세지 창이 뜨게 된다. 이 경우 도움말 기능을 비활성화하고자 할때는 다음과 같이 하면 된다. -> ID_HELP 관련 커멘드 주석처리 BEGIN_MESSAGE_MAP(CToolDBHandlerApp, CWinApp) //ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() 더보기
[MFC] 키보드 키 값 VC깔린곳에 include폴더를 보시면 winuser.h파일이 있는데요. /* * Virtual Keys, Standard Set */ #define VK_LBUTTON 0x01 #define VK_RBUTTON 0x02 #define VK_CANCEL 0x03 #define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */ #define VK_BACK 0x08 #define VK_TAB 0x09 #define VK_CLEAR 0x0C #define VK_RETURN 0x0D #define VK_SHIFT 0x10 #define VK_CONTROL 0x11 #define VK_MENU 0x12 #define VK_PAUSE 0x13 #define VK_CAP.. 더보기
[MFC] Enter Key 종료 방지 1. 원하는 다이얼로그에서 재정의를 클릭 2. PreTranslateMessage를 재정의한다고 하고 3. 원하는 메시지를 먹어버리면 됨... 여기서는 엔터키를 그냥 삼켰음. BOOL CSocketTestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN){ // 엔터키가 눌렸다면 if(pMsg->wParam == VK_RETURN ){ return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } [출처] mfc dialog 엔터키 종료 방지|작성자 Hyunnim 더보기
[MFC] AfxMessageBox() int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0); MessageBox와는 달리 제목을 넣는 부분은 사라졌습니다. Example) AfxMessageBox(“메시지 박스 테스트”, MB_OK | MB_ICONEXCLAMATION); nType은 다음 중에서 각각 하나씩 조합해서 사용할 수 있습니다. 버튼 스타일 의미 MB_ABORTRETRYIGNORE [취소], [재시도], [무시] MB_OK [확인] MB_OKCANCEL [확인], [취소] MB_RETRYCANCEL [재시도], [취소] MB_YESNO [예], [아니오] MB_YESNOCANCEL [예], [아니오], [취소] 아이콘 스타일 의미 MB_ICONEXCLA.. 더보기
[MFC] CCombobox 이벤트 처리 . 콤보 박스의 화살표를 클릭하면 박스의 테두리가 나온다. 2. 테두리를 밑으로 잡아 당겨 늘리면 더 많은 리스트를 추가할때 밑에 부분까지 볼수 있다. ================================================================================== [콤보박스 함수] ▷ CComboBox::AddString - 스트링을 더함. ▷ CComboBox::CComboBox - ComboBox 오브젝트를 생성(구성). ▷ CComboBox::Clear -현재 선택을 지움. ▷ CComboBox::CompareItem - 새로운 리스트 항목의 상태적 위치를 결정. ▷ CComboBox::Copy - 현재 선택을 Copy. ▷ CComboBox::Create - C.. 더보기
[C++]ifstream, ofstream 개선 // ex) COutFile outFile; outFile.open ( "abc/dd/ee.txt" ); 만약, abc/dd폴더가 없으면 만들고 나서 ee.txt를 만든다. #ifndef WIZFILESTREAM_H_INCLUDED #define WIZFILESTREAM_H_INCLUDED // #include #include #include // for CreateDirectory using namespace std; void MakeFolder( const string fileName ) { for( int i=1; i < fileName.length(); i++ ) { if( fileName[i] == '\\' || fileName[i] == '/' ) // { string subStr = file.. 더보기
[C++] 프로그래밍 파일 입출력(ofstream/ifstream) C++ 프로그래밍 파일 입출력(ofstream/ifstream) C++에서 파일 입출력 하는 방법이다. C 에서는 주로 FILE을 이용해서 파일 입출력을 하지만, C++에서는 fstream의 ofstream 과 ifstream 클래스를 이용하면 쉽게 구현이 가능하다. 사용방법 파일 쓰기 ofstream 객체명("파일명"); 파일 읽기 ifstream 객체명("파일명"); 또는 ifstream 객체명 객체명.open("파일명"); or 객체명.open("파일명" , open모드|open모드); open 모드 열거형 상수 ios::in 읽기만 가능한 형태로 파일 오픈 ios::ate 파일을 오픈하면서 파일포인터를 끝부분으로 옮김 ios::app 출력하는 데이터가 항상 파일의 끝에 기록 ios::trunc 오.. 더보기
[MFC] 다이얼로그 내부 Formview 생성하기 Dialog를 생성해서 내부의 화면만 계속 바꾸고 싶을 때가 있습니다. 예를 들자면 Visual Studio에서 제공하는 환경설정 메뉴같은 경우입니다. 좌측의 트리 메뉴를 선택하면 우측의 메뉴가 변경되는 것을 볼 수 있습니다. 유사한 화면을 갖는다면 굳이 새로운 화면을 만들 필요는 없습니다. 컨텐츠만 바꿔주면 되기 때문입니다. 하지만 전혀 다른 화면을 가져야 한다면, FormView를 쓰는 방법을 고려해볼 수 있습니다. FormView는 Dialog와 같이 컨트롤들을 올려서 사용할 수 있는 View 입니다. Dialog에 FormView를 올리고 다른 FormView로 교체하는 방법을 사용하면 마치 Dialog가 화면을 갱신하는 듯한 효과를 줄 수 있습니다. 일단 프로젝트를 하나 생성합니다.(이름은 Su.. 더보기
[MFC] SDI 메뉴(MENU) 없애기 MFC에서 메뉴 없애기 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: CREATESTRUCT cs를 수정하여 여기에서 // Window 클래스 또는 스타일을 수정합니다. cs.style = WS_POPUP // WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE ; cs.x = 20; // 윈도우의 시작 위치 cs.y = 30; cs.cx = 100; // 윈도우의 크기 설정 cs.cy = 200; if (cs.hMenu!=NULL) { // 메뉴 없애기 ::DestroyMenu(cs.hMenu); // delete men.. 더보기
[C] strtok함수를 이용한 문자열 자르기[펌] 1. 함수의 원형 char *strtok(char *strToken, const char *strDelimit); 2. 함수의 기능 strToken 변수에 문자열의 주소가 명시되면 해당 문자열의 처음 위치에 존재하는 토큰(token)을 찾아서 해당 주소를 반환하고, strToken에 NULL이 명시되면 토큰 찾기가 진행중이라는 뜻이고 현재 진행상태에서 다음에 해당하는 토큰을 찾아서 그 주소를 반환한다. 3. 함수의 매개변수에 대한 설명 3.1 strToken 한개 이상의 토큰을 포함하고 있는 문자열의 시작 주소를 명시한다. 만약, 이미 호출한 문자열에서 다음 위치에 해당 하는 토큰을 찾는 경우, NULL로 명시한다. 3.2 strDelimit 구분문자(delimiter)들로 구성된 문자열의 시작 주소를 .. 더보기
[MFC]다이얼로그 한쪽 사이즈만 조절 가능하게 하기 SDI 프로젝트에 다이얼로그 속성을 Child, Resizing 로 넣었습니다. 리사이징 속성을 주면 다이얼로그 왼쪽, 위, 오른쪽, 아래 에서 마우스로 다이얼로그 사이즈 조절이 가능한데 아래 부분만 마우스로 사이즈 조절이 가능하도록 하려면 WM_NCHITTEST 추가후... LRESULT CMyDlg::OnNcHitTest(CPoint point) { LRESULT lRes = CDialog::OnNcHitTest(point); switch(lRes) { case HTLEFT : case HTRIGHT : case HTTOP : case HTTOPLEFT : case HTTOPRIGHT : // case HTBOTTOM : case HTBOTTOMLEFT : case HTBOTTOMRIGHT : lRe.. 더보기
[MFC]윈도우 리사이즈시 컨트롤 사이즈 리사이즈 //Init void Dlg_Mesh_Object::OnInitialUpdate() { CFormView::OnInitialUpdate(); RECT rt; GetClientRect( &rt ); RECT Anirt; m_List_Ctrl_Obj_Ani_List.GetClientRect(&Anirt); //비율을 계산해둠. m_fAni_List_W_Ratio = (float)((float)Anirt.right / (float)rt.right); m_fAni_List_H_Ratio = (float)((float)Anirt.bottom / (float)rt.bottom); m_bInit = true; } //Size void Dlg::OnSize(UINT nType, int cx, int cy) { CFor.. 더보기
[MFC] 다이얼로그 사이즈 조절 관련 함수들 다이얼로그를 이용한 작업 도중에 생긴 답답했던 내용들을 정리합니다. * 미션: 다이얼로그를 처음 띄울때 화면의 최대화 사이즈로 키우기. *어디를 수정해야 할까? 1)첫시도: mfc의 리소스의 dialog의 속성을 수정하여 해결하려 하였으나 못찾음 ㅠ.ㅠ 2)Dialog를 생성하고 DoModal을 실행하기 이전에 코드를 수정해 보기 : 실행시 죽어버림 ㅠ.ㅠ 3)dialog의 OnInitDialog에서 설정함 -> 처리됨 * 어떻게 수정했을까? 먼저 윈도우 조절 관련 함수들을 찾아보니. ModifyStyle SetWindowPos MoveWindow 등으로 조절할 수 있다. (자세한 내용은 MSDN참조) 그리고 좌표를 불러오는 함수들에는 GetWindowRect() : 윈도우 좌표불러오기 GetSystem.. 더보기
[MFC] 다이얼로그에 CView 동적 생성 다이얼로그에 CView에서 상속받은 클래스를 붙이려면 먼저 CFrameWnd에 CView를 붙이고 그 CFrameWnd를 다이얼로그에 붙이면 가능합니다. CView 같은경우는 독립적으로 윈도우를 구성하기 보다는 CFrameWnd의 차일드 윈도우로 사용될 목적으로 만든어진 클래스이기 때문에 Frame에 안붙일경우 문제가 많습니다. 개인적인 생각으로는 특별히 CView을 사용해야할 이유가 없다면 CWnd에서 바로 상속받은 클래스를 다이얼로그에 붙이는것이 좋지 않을까 합니다. CFrameWnd m_wndFrame; CView *pView; if(m_wndFrame.m_hWnd) m_wndFrame.DestroyWindow(); CRect rectClient; GetClientRect(rectClient); m.. 더보기
[MFC] 버튼의 동적생성 [질문 내용] mfc위자드로 CView로 상속받은 (SDI)프로젝트를 생성했습니다. 그리고 뷰에 1행에 동적으로 버튼을 행맞춰서 만들고 싶은데, 아무리 생각해도 모르겠군요. 동적으로 말입니다. 4개든 10개든.... 그리고 각 버튼을 눌렀을때 메시지박스가 나와 "현재버튼은 1입니다." 같이 나왔으면 합니다. 다시말해 이벤트 핸들러도 동적으로 만들어야 합니다. 너무나 어려워 질문드립니다. [답변 내용] 안녕하세요~! 먼저 동적으로 버튼을 5개 생성시킨다고 가정하고 해더파일에 #define MAX_BUTTON_COUNT 5 라고 먼저 정의하고, 버튼을 동적으로 만들어서 사용해야하니까 동적으로 생성된 버튼을 관리할 변수를 선언해야겠죠? 클래스 선언부에 말이죠!! private: CButton *mp_test_.. 더보기
[MFC] 다이얼로그 동적 생성 다이얼로그 동적 생성은 쉽다. 알고보니 말이다. 1. 우선 프로젝트 리소스에 다이얼로그를 추가한다. 2. 해당 다이얼로그에 대해 클래스를 추가 및 연결한다. 3. 원하는 위치에 다음과 같은 소스를 추가한다. ==> 상황 : 메인프로그램에서 버튼 클릭이 발생한 경우, 다이얼로그 동적 생성 위에서 미리 만들어둔 다이얼로그 클래스가 이름이 MyDlg, 다이얼로그 ID가 IDD_MYDIALOG라고 했을 때, 1. 에 #include "MyDlg.h"를 추가 에 MyDlg *testDlg; //포인터 변수 추가 2. 파일에서 생성자에 초기화 ex) CMainFrame::CMainFrame(){ testDlg = NULL; //초기화.. 안해줘도 뭐;; } 3. 파일의 버튼클릭에 관한 해당 이벤트 함수 안에서 ex.. 더보기
[MFC] CEdit 입력 제어 오늘은 제목과 같이 CEdit에 대해서 알아보도록 하겠습니다. 입력 받는 창을 Edit입니다. 사용자에 입력을 받거나 원하는값을 넣어 주는것이 바로 Edit담당입니다. 백문이 불여 일견이라 ;; 한번 직접 해보시는것이 더 빠르게 오실듯 싶습니다. 1. 파일 -> 새 프로젝트 -> MFC 응용프로그램 선택 -> 이름을 정하신후 확인 2. 응용프로그램 종류에서 -> 단일 문서 (SDI)를 선택후 -> 마침을 클릭하시기 바랍니다. 모든 컨트룰 에 기본적인 함수가 Create()입니다. 이것은 컨트룰를 생성하는 기본중 기본함수로 어떤 형식인지 보도록 하겠습니다. virtual BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); .. 더보기
[MFC] SetWindowPos() 윈도우 위치 및 크기 등의 변경 SetWindowPos(HWND hWnd, int X, int Y, int cx, int cy, UINT uFlags); ▶ hWnd : 이동 대상 윈도우의 핸들 ▶ X,Y : 윈도우의 새로운 좌상단 좌표를 지정한다. 픽셀 단위이다. ▶ cx, cy : 윈도우의 새로운 폭과 높이를 지정한다. 픽셀 단위이다. ▶ uFlags : 위치와 크기 변경에 대한 여러 가지 옵션들이며 플래그들을 조합하여 지정할 수 있다. SWP_ASYNCWINDOWPOS 이 함수를 부른 스레드와 윈도우를 소유한 스레드가 다른 입력 큐를 사용할 경우 시스템은 윈도우를 소유한 스레드에게 요구를 포스팅하기만 한다. 이는 호출 스레드가 다른 스레드가 요구를 처리하는 동안 블럭되는 것을 방지한다. SWP_DEFERERASE WM_SYNCPA.. 더보기
[MFC] CString <-> char* / int CString => char* 변환 char * ch; CString *str; 1) ch = (LPSTR)(LPCSTR)str; 2) ch = str.GetBuffer(str.GetLength()); 3) wsprintf( ch, "%s", str); char* => CString 변환 1) str = (LPCSTR)(LPSTR)ch; 2) str = ch; CString => int 변환 int a; CString strTest = _T("abc"); a = _ttoi(strTest); 문자열에서 숫자만 추출하기 CString str = _T("abc123def456"); CString strNumber(_T("")); for(int i = 0; i < str.GetLength(); i++){ cha.. 더보기
[MFC] CEdit Styles Edit Styles Visual Studio 2010 http://msdn.microsoft.com/ko-kr/library/6e36b89f(v=vs.100).aspx ES_AUTOHSCROLL Automatically scrolls text to the right by 10 characters when the user types a character at the end of the line. When the user presses the ENTER key, the control scrolls all text back to position 0. ES_AUTOVSCROLL Automatically scrolls text up one page when the user presses ENTER on the .. 더보기
[MFC] GetDlgItem() CWnd::GetDlgItem 1. 함수의 원형 CWnd *GetDlgItem(int nID) const; 2. 함수의 기능 이 함수는 일반적으로 대화상자에 생성된 컨트롤의 주소를 얻는데 사용됩니다. 왜냐하면, 대화상자는 대부분 리소스 편집기를 이용해서 사용할 컨트롤을 편집하고 DoModal 함수를 사용하여 컨트롤을 편집하고 DoModal 함수를 사용하여 대화상자가 생성되는 시점에, CDialog 클래스가 리소스 파일을 참조하여 컨트롤을 생성하기 때문에 기본적으로 대화상자 위에 생성된 컨트롤의 주소를 알 수가 없습니다. 프로그래머는 기본적으로 리소스 편집기에서 편집할 때 사용한 컨트롤의 번호만을 알고 있기 때문에 이 컨토를 번호를 이용하여 해당 컨트롤의 주소를 얻을 때, 이 함수를 사용합니다. 3. 함수.. 더보기
[MFC] 특정 영역 속에 마우스 클릭시 이벤트 발생법 탭컨트롤 상단에 오른쪽 마우스를 이용하여 어떤 탭을 클릭했는지 출력하도록 구성한다면 아래와 같이 작성할수 있습니다. 제가 링크해드린 예제에서처럼 CTabCtrl에서 계승 받은 클래스에 WM_RBUTTONUP 메시지를 등록하시고 아래와 같은 코드를 추가하세요 ^^;; WM_LBUTTONDOWN 메시지 핸들러에서 다음과 같은 처리를 해줍니다... CRect rt; // 픽쳐 컨트롤의 사각형 영역 조사 // 픽쳐 컨트롤의 사각형 좌표를 구함 // GetClientRect 는 크기를 구하니 GetWindowRect 이용... ((CStatic*)GetDlgItem(IDC_STATIC_PIC))->GetWindowRect(&rt); // GetWindowRect 로 얻은 좌표는 스크린 좌표(물리적) 이니 이를 /.. 더보기