일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- mysql
- 마이크로소프트
- 포트폴리오
- MFC 예제
- visual
- tips강좌
- 핵심 요약
- C++
- 김성엽
- SSG
- MyThread
- MyTread
- 유료강좌
- Time
- 충무창업큐브
- Tipsware
- C언어
- C
- win32
- 정처기 독학
- 실습
- ListBox
- 별찍기
- do it c
- 정보처리기사
- MFC
- mfc 실습
- 미가공
- 도움말
- linux
- Today
- Total
목록MFC (65)
History

이번 실습은 달력을 직접 만들어서 일정을 입력하고 저장하는 프로그램을 만드는 것이다. 해당 날짜에 일정을 입력하여 적용을 하면 해당 날짜에 일정이 있다는 표시를 하기 위해 Ellipse를 이용했다. 아래 사진은 실행되기 전 다이어그램이다. 아래 GIF는 프로그램 실행화면이다. 원래 윈도우에 투명화를 적용시켜서 만들었지만, 투명화가 적용되는 것보다 완전 불투명한 윈도우가 시각적으로 보기 편해서 계층화 속성은 부여하지 않았다.
Edit컨트롤을 다루다 보면 tab키랑 enter키를 입력받는 경우가 있는데 아무 예외처리를 하지 않으면 다른 컨트롤로 포커스를 빼앗기거나 프로그램이 IDOK를 만나 꺼지는 경우가 있다. 이러한 경우 PreTranslateMessage 가상함수에서 키보드 관련 이벤트 예외를 처리해줘야 한다. 아래 코드를 보면 WM_KEYDOWN을 사용해서 키보드가 눌렸을 때를 체크한다. 그리고 그 메시지가 VK_TAB(TAB키의 상수값이다.) 인지 확인한다. 마지막으로 현재 메시지의 핸들이 내가 선택한 Edit의 핸들과 같은지 확인하고, 조건문 안에서 원하는 처리를 해주면 된다. 난 들여쓰기 기능과 Enter 기능을 쓰고 싶어서 아래 코드처럼 작성했다. BOOL CMFCCalenderDlg::PreTranslateMes..
SendMessage BOOL SendMessage( [in, optional] HWND hWnd, // 메시지를 받을 윈도우 핸들 [in] UINT Msg, // 전달할 메시지 [in] WPARAM wParam, [in] LPARAM lParam ); -동작 순서 - 메시지를 메시지 큐에 넣는 것이 아니라 곧바로 윈도우 프로시저(WinProc)로 보내 즉각 처리하도록 한다. - 메시지가 완전이 처리되기 전에 리턴하지 않는다.(블록 시킨다.) -장점 - 보낸 메시지의 정확한 처리 -단점 - 보낸 메시지가 완전히 처리될 때까지 기다리므로, 메시지를 보낸 쪽은 블록 상태에 머물게 된다. - 잘못하면 프로그램이 계속 멈춰있는 상태로 머물 수 있다. *멀티 스레드 사용할 시 SendMessage는 사용에 위험이..
static 컨트롤을 기본적으로 실행해 놓으면 뒤에 배경과 색상이 검은색으로 출력된다. 이러한 것을 바꾸기 위해 WM_CTLCOLOR 메시지 함수를 사용해서 static 컨트롤을 제어할 것이다. 모든 static컨트롤을 제어하고 싶으면 CTLCOLOR_STATIC 상수를 이용하면 사용한 모든 static을 제어할 수 있다. 마찬가지로 edit컨트롤도 CTLCOLOR_EDIT 상수를 이용하면 사용자가 사용한 모든 edit 컨트롤을 제어할 수 있다. 참고 코드는 아래와 같다. HBRUSH CMFCApplication3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlCo..

이번 차시 게시물은 달력 만들기 3번째이다. 저번 step까지는 메인 Dlg에서 작업했지만, step3에서는 캘린더 구현하는 코드를 CWnd 클래스에서 상속받은 클래스로 구성하였다. 이렇게 해놓으면 후에 달력을 만들 때 새롭게 안 만들고 재사용이 가능하다. 그리고 달력도 일반적으로 많이 사용하는 달력 화면으로 변경하였다. 실행화면은 아래와 같다.

이번 차시에는 mfc 기본 컨트롤이 제공하는 기능처럼 양 옆 화살표를 누르면 해당 년 월이 표시되게 구현했다. 화살표는 TextOut으로 문자를 이용해서 표시했고, 해당 좌표를 계산해서 OnLButtonDown함수를 사용해서 step2 달력 프로그램을 구현했다.

mfc는 기본적으로 제공되는 달력 컨트롤이 있지만 기능이 한정적이고 달력의 출력 형태를 개발자가 원하는 대로 변경하는 작업도 쉽지 않기 때문에 좀 더 자신의 성향에 맞게 달력을 만들고 싶으면 직접 만들어서 사용하는 것을 권장한다. 이번 step1 단계에서는 기본적으로 현재 달을 출력하는 프로그램을 만들어본다. 우선 해더에서는 if를 최소한으로 사용하기 위해 배열 변수를 아래처럼 추가해준다. private: wchar_t* mp_week[7] = { L"일",L"월" ,L"화" , L"수" , L"목" , L"금" , L"토" }; int m_date[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; COLORREF m_date_color[7] = { RGB(255,0,0..

사람들은 트레이 아이콘이라는 것이 생소할 것이라고 생각한다. 그래서 아래 예시 사진을 넣어놨다. 아래에서 보이는 것과 같이 트레이 아이콘은 PC에 작업 표시줄에 나오는 작은 아이콘들이다. 이제 MFC 프로그램을 실행하면 사용자가 원하는 아이콘과 문구가 마우스의 포커스에 맞춰졌으면 아래 예시처럼 동작해야 한다. 트레이 아이콘의 모양과 문구 등 속성을 설정하려면 아래 링크한 NOTIFYICONDATA 구조체의 도움말을 보면 된다. https://hard-go-head.tistory.com/entry/mfc-NOTIFYICONDATA-%EA%B5%AC%EC%A1%B0%EC%B2%B4-%EB%8F%84%EC%9B%80%EB%A7%90 [mfc] NOTIFYICONDATA 구조체 도움말 https://learn...