CButton을 상속 받은 CMonitorButton을 하나 만들어서 버튼을 동적 생성 하기 위한 프로그램을 구현했다. CMonitorButton에선 오너 드로를 위해 DrawItem을 호출했고, OnBnClicked를 오버라이딩해서 자신의 nID값을 nSelectedMonitor 변수에 리턴해주었다. CMonitorButton을 생성하기 위해 다음과 같은 코드를 구현하였는데 for(int i = 0;i Create(strMonitorNum,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,rtMonitor[i], this,i); } 마지막 인자인nI..
보통 mfc는 선언부 파일(*.h)과 구현부 파일(*.cpp)을 나누어 놓는다. 선언부 class에서 static 멤버 변수를 선언하고 구현부에서 사용하려고 하면 Link시점에 에러가 난다. 예를 들어 다음과 같은 소스가 있다고 해보자 StaticSample.h (선언부) //StaticSample.h class CStaticSample { private: static int m_nNumofClass; public: CStaticSample(void); ~CStaticSample(void); static int GetNumofClass(void); }; StaticSample.cpp (구현부) //StaticSample.cpp #include "StaticSample.h" CStaticSample::CS..
예를 들어 인자가 한개 달린 생성자만을 갖고 있는CDevice 라는 class가 있다고 했을 때 class CDevice{ public: CDevice(int a); }; 이 CDevice를 다른 클래스에서 멤버 변수로 사용할려면 어찌 해야 할까? 자바의 경우는 걍 class CObject{ public CDevice mDevice = new Device(n); public CObject(){ } }; 해주면 되겠지만.. C++(/MFC)은 그렇지 않다.. 물론 포인터로 선언해 준다면 저런식으로 해주면 좋겠지만 일반 멤버 변수로 생성자를 가지도록 변수 생성을 할려면 어떻게 해야할까 class CObject{ public: CDevice m_Device; CObject(); } CObject::CObjec..
1. 더블 버퍼링에 대하여 더블버퍼링은 WM_PAINT에서 해주는 일을 간략화 시켜주기 위해! 다른 곳에서 미리 BITMAP에다가 다 그려놓고 WM_PAINT에서는 해당 BITMAP을 불러와주는 일만 해주도록 하는 것. MFC의 경우엔 CBitmap을 사용한다 클래스 내에 CBitmap m_BitmapBG; 뭐 이런식으로 하나 만들고 다른 함수 (예를 들어 고정 배경이라면 Init부분에서)에서 MemDC를 만들어 SelectObject로 m_BitmapBG를 선택한 후 그리기를 완료한다. 이 때 중요한 점은 CBitmap.DeleteObject()를 하면 안된다는 것! 이건 WM_DESTROY시에 해줘야 한다. 여튼.. m_BitmapBG에 그리기를 완료하고나서는 WM_PAINT에서는 m_BitmapBG..
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..
- Total
- Today
- Yesterday
- Cloud
- Python
- 드라이버
- C
- jni
- database
- Quiz
- AWS
- jni강좌
- 리눅스
- driver
- algorithm
- linux
- winapi
- NDK
- java
- MFC
- Visual C++
- gcc
- it
- source
- 프로그래밍
- Troubleshooting
- kering
- C++
- 음악
- API
- db
- android
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |