본문 바로가기

old drawer/C, C++, MFC

[MFC] SDI 환경에서 이벤트 처리 OnCommand() 뷰 클레스에서 작업할때, 짜증나는게 어떤 마우스 이벤트나, 키 이벤트를 처리하는데, 수많은 마우스 이벤트에 대해서 처리하다 보면 뷰클레스의 크기가 커지고, 뷰클레스에서 작업하다 보니깐, 다른 클레스에 접근하는게 쉽지 않아서, 객체들간이 메시지 주고 받는게 적어지고, 거의 뷰클레스 위주로 짜여지는 악순환이 생기게 된다. 즉 뷰클레스에서 일어나는 이벤트는 뷰클레스에 추가할 수 밖에 없는 현실... 나도 한참 뒤에 알았는데 좋은 방법이 있다. 바로 메인프레임에서 이벤트를 건드는 것이다. 메인프레임에서는 AfxGetMainWnd() 함수를 통해서 다른 클레스 객체에 접근이 쉽기때문이다. 초록색으로 표시한 부분은, 일반적인 이벤트 핸들러 추가로 생성한 코드고 빨간색은 메인프레임의 OnCommand를 오버라이드 한.. 더보기
[MFC] SDI 환경에서 버튼의 동적 생성과 메시지를 처리하는 방법 [질문 내용] mfc위자드로 CView로 상속받은 (SDI)프로젝트를 생성했습니다. 그리고 뷰에 1행에 동적으로 버튼을 행맞춰서 만들고 싶은데, 아무리 생각해도 모르겠군요. 동적으로 말입니다. 4개든 10개든.... 그리고 각 버튼을 눌렀을때 메시지박스가 나와 "현재버튼은 1입니다." 같이 나왔으면 합니다. 다시말해 이벤트 핸들러도 동적으로 만들어야 합니다. 너무나 어려워 질문드립니다. [답변 내용] 안녕하세요~! 먼저 동적으로 버튼을 5개 생성시킨다고 가정하고 해더파일에 #define MAX_BUTTON_COUNT 5 라고 먼저 정의하고, 버튼을 동적으로 만들어서 사용해야하니까 동적으로 생성된 버튼을 관리할 변수를 선언해야겠죠? 클래스 선언부에 말이죠!! private: CButton *mp_test_.. 더보기
[MFC] 컨트롤 동적 생성 이것저것 하다보면 컨트롤들을 동적으로 생성해야하는 경우가 있을 수 있다. 그런 경우는 다음 순서로 행하면 된다. 1. xxxxDlg.h 파일에 원하는 컨트롤의 변수를 선언한다. 2. 원하는 위치(특정 이벤트 발생에 대한 처리 부분)에서 Create() 3. Resource.h에 ID를 설정 그럼 위의 순서에 따라서 버튼을 눌렀을 때 달력이 동적으로 생성되로록 해보겠다. 더보기
[MFC] 버튼에 이미지 넣기 MFC 버튼에 이미지를 넣는 예제 입니다. 소스는 테스트 용이라 공개하지 않고요 (캡쳐만 뜨고 지워버린;) 초보자분도 이대로 따라만 하시면 충분히 할 수 있을 거라 생각합니다. Ctrl + Shift + E 를 누르시면 다음과 같은 리소스 뷰가 나타난다. dialog 에 가면 IDD_DIALOG 이라는 친구가 있는데 야를 더블클릭하면 이런 창을 만날수 있슴. 여기서 도구상자에 가서 Button을 생성해준다. 그냥 드레그로 다가 살짝 끌어당겨 줌 만들어 진다. 그럼 이러한 버튼이 생성된다. 버튼을 누르고 오른쪽 버튼을 눌러주면 이러한창이 나타나고 [변수추가]라는 버튼을 살며시 눌러준다. 그럼 이러한 창이 나타나고 여기서 중요한게 두가지가 있다. 1. 변수 형식을 꼭 CBitmapButton 2. 변수 이름.. 더보기
[MFC] CWnd 유용한 매소드들 - GetParent()/SetParent() - GetStyle()/ModifyStyle() - 추후 계속 업데이트 예정 더보기
[MFC] GetStyle(), ModifyStyle()을 사용한 윈도우 스타일 변경 // GetStyle함수로 현재 적용된 스타일을 알아낼 수 있으며, // ModifyStyle함수로 특정 스타일을 추가 또는 제거할 수 있습니다. ^^ // (SetStyle함수나 DeleteStyle함수가 없고, 대신 ModifyStyle함수가 있는 겁니다.) DWORD GetStyle( ) const; 리턴값 : 윈도우의 스타일, 해당 스타일을 AND마스크연산으로 구할 수 있다. BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 ); dwRemove 에는 제거하고 싶은 스타일들을 비트연산자 중 OR(|)연산자로 여러개 묶어서 넣을 수 있으며, dwAdd에는 .. 더보기
[C/C++] 문자열 컨트롤 함수 : strlen, strcpy, strcat, strstr, strchr, strtok, atoi 등 strlen (String Lenth) : 문자열의 길이를 리턴하는 함수. #include size_t strlen(const char* s); 문자열의 길이 정보 반환 strcpy (String Copy), strncpy (String Number Copy) : 문자열 복사 함수. #include char* strcpy(char* dest, const char* src); char* strncpy(char* dest, const char* src, size_t n); 첫 번째 매개변수에 전달된 주소 값(dest에 전달된 값) 반환. strcat (String Concatenate), strncat (String Number Concatenate) : NULL문자 뒤에 문자열을 추가하는 함수. #incl.. 더보기
[C++] const int, const int*, int* const, const int* const, etc * const -- 변수를 상수화 시키는데 사용된다. const int n = 0; 상수화가 된 변수 이다. 대입 연산은 허용 되지 않는다. const int * n; 데이터 상수화를 하고 있다. n이라는 포인터가 가리키는 데이터를 상수화 시켰다. *n=20은 안된다. 대입 연산이 안된다. 메모리 공간이 상수화가 된것은아니다. n으로 접근해서 데이터를 조작하는것을 막는것이다. 하지만 a = 10; cosnt int * n = &a; a에 대한 데이터 조작은 가능하지만 n이라는 포인터를 이용해서 a의 데이터 조작은 불가능하다. int * const n; 포인터가 상수화 된것이다. n = &b; n = &a(x); 포인터 연산 허용이 안된다. const int * const n; n이라는 가리키는 곳의 데이.. 더보기
[C++] fstream.h를 활용한 파일 입출력 #include #include #include #include using namespace std; int main(){ //------------------------------------------------------- // C://에 test.txt라는 파일을 생성하고 3명의 정보를 파일출력 string name; int age; string address; int i; ofstream fout; fout.open("C://test.txt"); //새로운 파일을 생성 cout 더보기
[MFC] 실습3. Rect를 통해 버튼 그리기 & 비트맵 등록하기 예제 프로젝트 더보기
[MFC] Bitmap 등록 후 화면에 그리기 CPen* pOldPen = dc.SelectObject(&NewPen); CBrush NewBrush; CBrush* pOldBrush; CBitmap Bitmap; Bitmap.LoadBitmapW(EX_BITMAP); NewBrush.CreatePatternBrush(&Bitmap); pOldBrush = dc.SelectObject(&NewBrush); 이렇게 비트맵을 등록하고 아래의 dc.StrokeAndFillPath(); 를 통해서 화면에 그려준다. 더보기
[MFC] Rect로 버튼 그리기 CRect increaseTempRect(increaseButtonRect); increaseTempRect += CRect(1, 1, 1, 1); dc.Rectangle(&increaseTempRect); dc.FillSolidRect(&increaseButtonRect, ::GetSysColor(COLOR_BTNFACE)); if (increaseButtonClicked){ dc.Draw3dRect(increaseButtonRect, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DLIGHT)); }else{ dc.Draw3dRect(increaseButtonRect, ::GetSysColor(COLOR_3DLIGHT), ::GetSysColor(COLO.. 더보기
[MFC] ListCtrl 구현 관련 사이트 모음 http://blog.naver.com/PostView.nhn?blogId=ponyboy&logNo=120065172914 더보기
[MFC] error C2593: 'operator +='이(가) 모호합니다. 문자열 사이의 '+=' 연산자에 대해 모호하다는 에러가 발생하는 경우, 예를 들어, CString strTmp; strTmp = "Test String!"; m_str += (LPCTSTR)strTmp; //(LPCTSTR)형으로 캐스팅 해주어야 에러가 없어진다. 더보기
[MFC] error C2664: 'CWnd::MessageBoxW' : 매개 변수 1을(를) 'CMainFrame *const '~'LPCTSTR'(으)로 변환할 수 없습니다. MFC로 처음 응용 프로그램 마법사를 실행할 때 간단하게 대화상자 기반 프로그램을 선택하고 유니코드 라이브러리 사용 에 체크를 했다. 간단하게 Dlg.cpp에서 OnInitDialog()에 밑의 두 문장을 추가했는데 오류가 발생했다. AfxMessageBox("OK!"); MessageBox("hi"); ------------------------------------------------------------------------------------------ error C2665: 'AfxMessageBox' : 2개의 오버로드 중 모든 인수 형식을 변환할 수 있는 오버로드가 없습니다. c:\program files\microsoft visual studio 8\vc\atlmfc\include\af.. 더보기