CDialog를 상속받은 CParentDlg가 있을 때 CParentDlg를 상속받은 CChildDlg를 만들어보자~ 예제도 있으니 다운 받아도 되고 안받아도 되고.. vs2008에서 컴파일했음. 생각같아선 그냥 class CChildDlg : public CParentDlg { ... }; 해주면 될 것 같은데 이게 끝이 아니다. 우선 부모가될 Parent 다이얼로그에서는 MFC Wizard가 만든 기본 생성자 외에 CParentDlg::CParentDlg(UINT nIDTemplate, CWnd* pParent) 를 추가해야한다. 생성자 내용은 CParentDlg::CParentDlg(UINT nIDTemplate, CWnd* pParent) : CDialog(nIDTemplate, pParent) ..
다이얼로그로 대화창을 만들고, 에디트 버튼이나, 기타 엔터키 입력을 받는 콘트롤을 올려 놓을 경우에, 다이얼로그에서 먼져 엔터키를 받아서 OnOK();가 호출되어 걍 ~~ 죽죠. 이 부분을 막아 보겠습니다. 1. 리소스 부분에서 IDOK 부분을 다른 리소스로 변환합니다. IDOK -- > IDC_BUTTON_ACCEPT #define IDC_BUTTON_ACCEPT 1150 //(이건 Resource.h에 있음) 2. IDC_BUTTON_ACCEPT의 핸들러 OnAccept();를 만들죠.. void CConfigDlg::OnAccept() { // Add code here.. CDialog::OnOK(); } 3. 그 핸들러에 IDOK 의 디폴트 핸들러를 호출합니다. (위에서 같이요: CDialog::..
버튼 모양을 맘대로 만들어 줄 때.. Bitmap으로 바꿔주기 위해 사용한다. Owner Draw라는 기법(?)인데 Combo, List, Button에 사용한다. 버튼으로 예를 들면 Dialog에 Button을 그린 후 Add Variation해서 CButton으로 등록한다. 이름을 m_btnTest로 했으면 CButton m_btnTest로 돼있을텐데 여기서 CButton을 강제로 CBitmapButton으로 바꿔준다. (CButton을 상속받은 클래스이다.) 버튼의 4가지 상태를 등록할 수 있는데, 가만히 있을때(U), 눌렸을 때(D), 포커스가 갔을때(F), 무효됐을때(D) 이렇게 4가지이다. 각각의 Bitmap을 Resource에 import한다. 그 후 OnInitDialog() 함수에다가 아..
사소하지만 자주 쓰이는 것들. 예를 들어 Doc/View간에 서로 핸들 얻기, DLL 함수 정의, 각 컨트롤 사용하기(List, Progress Bar 등), 창 크기 및 위치 정보 구하기 등을 적어놓았음. 1. DC얻기 CClientDC dc(this); 2. Client 영역 구하기 GetClientRect(&rect); WM_SIZE 메시지발생후 cx,cy 사용 3. 문자열 사각형안에 그리기 pDC->DrawText(문자열,사각형,Style); Style: DT_BOTTOM - 문자열을 사각형 맨아래줄에배열 반드시 DT_SINGLELINE과 함께사용 DT_CENTER - 문자열을 가로중앙에 배치 DT_VCENTER - 문자열을 세로중앙에 배치 DT_LEFT,RIGHT - 문자열을 좌,우로 배치 DT..
일반적으로 MFC등과 같은 프로그램을 개발할 때, "C:\Program Files\..."와 같은 파일 위치를 참조하거나 레지스트리의 HKLM/softwoare/... 등의 키를 참조하는 등의 일을 진행한다. 더 나아가서는 C:\Windows\System32\drivers\etc\hosts 와 같은 파일을 읽거나 쓰는 등의 일을 담당할 수도 있다. XP 이하, 9x, NT, 200x 등에서 어드민 계정으로 로그인 하여 아무 이상없이 작동하던 코드가 있다면, 이를 비스타 하에서 재 컴파일하서 돌려보면 제대로 되기는 커녕, 시스템 call에서 계속 에러가 발생하기 쉽다. 가장 큰 이유는, 기존과 같이 로그인 한 계정이 admin계정이면 거기에서 실행되는 모든 프로그램은 모두 admin 계정을 갖는 기존 경우..
MFC에서 다이얼로그 내에 컨트롤의 위치 좌표를 구하려는데.. 왠지 GetClientRect일것 같은데 이건 위치는 안구하고 크기만 구한다. GetWindowRect를 하면 바탕화면 전체 대비 컨트롤 위치가 나온다. 그렇다면 .. 쉽게 this->GetWindowRect로 구한 좌표해서 컨트롤.GetWindowRect 로 구한 좌표를 빼주면 땡 아닌가? 근데 이러면 간지가 안난다.. Static Control을 m_static으로 변수 추가 한 후 CRect rect; m_static.GetWindowRect(&rect); ScreenToClient(&rect); 해주면 위치 딱 나온다~ 근데 문제는 제목 표시줄 크기는 제외하고 구하기 때문에 결국에 보정은 해줘야 한다는거;;;
본문 수정 및 배포 허가를 받았으며, 본 강좌는 데브피아에도 게제되 있음을 알려드립니다. 퍼가실때는 꼭 출처를 밝혀 주시기 바랍니다. Visual C++ 시리얼 통신(RS-232) 강좌 (2) 자~ 그럼 이제 1 편에서 만든 시리얼 클래스를 어떻게 사용할 것인가에 대한 강좌를 시작하겠습니다. 일단 테스트하기 쉽게 다이얼로그 기반 프로젝트를 하나 생성하고, 저는 프로젝트 이름을 SerialTest라 하였습니다. 아래 그림과 같이 시리얼 포트를 열고 닫기 위해 버튼을 두개 만들고 에디트 박스에 있는 내용을 보내기 위해 보내기 버튼을 하나 만들었습니다. 그리고 받은 데이터를 표시하기 위해서 리치에디트 박스를 하나더 추가 하였습니다. 순수하게 시리얼 테스트만을 위한 것이라 UI는 볼품없지만 그래도 이정도면 훌륭..
본문 수정 및 배포 허가를 받았으며, 본 강좌는 데브피아에도 게제되 있음을 알려드립니다. 퍼가실때는 꼭 출처를 밝혀 주시기 바랍니다. Visual C++ 시리얼 통신(RS-232) 강좌 (1) 먼저 강좌를 하기 전에 몇 가지만 말씀 드리겠습니다. 일단 처음으로 강좌라는 것을 시도해보네요. 저는 10년(?)째 프로그래머의 길을 걷고 있는 사람입니다. 전 10년 전에 C언어를 처음 접했습니다. 무작정 VC++6.0 깔아놓고 그 두꺼운 비주얼 c++ 바이블을 놓고 밤새 일일이 코딩을 하던 안 좋은 기억이 생각나네요. 초보 때는 무식하게 프로그램을 개발했었지만 요즘엔 그 동안 했던 많은 소스들이 있기에 거의 copy & paste 로 프로그램의 80% 이상을 한다는… (많은 고수 분들이 그럴 것이라 생각되지만...
- Total
- Today
- Yesterday
- database
- algorithm
- AWS
- Cloud
- API
- db
- gcc
- android
- Python
- 안드로이드
- it
- C
- 프로그래밍
- Visual C++
- Quiz
- 드라이버
- MFC
- jni강좌
- linux
- Troubleshooting
- 음악
- driver
- 리눅스
- kering
- jni
- C++
- java
- NDK
- source
- winapi
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |