2008년 08월 30일
리소스 편집기에서 생성한 에디트 컨트롤과 똑같은 생김새의 에디트 컨트롤 동적 생성하기 ~

회사에서 ActiveX로 차트 프로그램을 개발하고 있는데요 ~ 마침 에디트 컨트롤 동적 생성을 구현해야 할 부분이 생겨서 가볍게(?) 동적 생성을 해 주었습니다. 그런데 리소스 편집기에서 생성한 에디트 컨트롤과 생김새가 전혀 다른 이상한 놈이 생성이 되더군요 ;; (사실, 에디트 컨트롤 동적 생성을 이번 기회에 처음 해봤습니다 흠 =3 )

그래서 리소스 편집기로 생성한 에디트 컨트롤의 윈도우 정보를 확인해 보기로 했습니다 !!

113: CEdit* pWnd = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
114: ASSERT(pWnd);
115:
116: pWnd->SetWindowText(_T("저는 리소스 편집기에서 디자인 한 에디트 컨트롤이예요 ^^"));
117:
118: WINDOWINFO windowInfo;
119:
120: pWnd->GetWindowInfo(&windowInfo);

그리고 121번 라인에 브레이크 포인트를 걸고 windowInfo 구조체의 내용을 확인해 보니 헉!! 이 녀석 확장 스타일을 사용하고 있었습니다 ;;

그래서 아래와 같이 코딩해서 해결 했습니다. 처음 시도 했을 때 소스와 해결 한 후의 소스 함께 작성해 봤습니다 ~~
바로 아래 그림은 아래 코드 실행 화면 입니다.

177: #define CREATE_EX
178: #define ID_EDIT 1000
179:
180: void CDynamicCreateEditControlDlg::DynamicCreateEditControl(void)
181: {
182:     CString strMsg = _T("저는 동적 생성으로 생성 된 에디트 컨트롤이예요 --+");
183:
184:     //컨트롤 동적 생성의 경우 반드시 소멸자에서 생성한 컨트롤의 메모리를 해제해 주어야 합니다.
185:     //new로 생성 했으니 당연하겠죠 ^^
186:     m_pEdit = new CEdit;
187:     m_pFont = new CFont;
188:
189:     m_pFont->CreateFont
190:     (
191:         15,                           //nHeight
192:         0,                            //nWidth
193:         0,                            //nEscapement
194:         0,                            //nOrientation
195:         FW_NORMAL,                    //nWeight
196:         FALSE,                        //bItalic
197:         FALSE,                        //bUnderline
198:         0,                            //cStrikeOut
199:         ANSI_CHARSET,                 //nCharSet
200:         OUT_DEFAULT_PRECIS,           //nOutPrecision
201:         CLIP_DEFAULT_PRECIS,          //nClipPrecision
202:         DEFAULT_QUALITY,              //nQuality
203:         DEFAULT_PITCH | FF_SWISS,     //nPitchAndFamily
204:         _T("Tahoma")                  //lpszFacename
205:     );
206:
207: #ifndef CREATE_EX
208:
209:     //처음에 에디트 컨트롤을 동적으로 생성하려고 시도 했던 함수 ..
210:     m_pEdit->Create
211:     (
212:         WS_CHILD | WS_VISIBLE | WS_BORDER, //DWORD dwStyle
213:         CRect(10, 13, 333, 37),            //const RECT& rect
214:         this,                              //CWnd* pParentWnd
215:         ID_EDIT                            //UINT nID
216:     );
217:
218:     m_pEdit->SetWindowText(strMsg.GetBuffer());
219:
220: #else
221:
222:     //리소스 편집기에서 생성한 에디트 컨트롤의 탄생의 비밀(?)을 알아낸 후 동적 컨트롤 생성
223:     m_pEdit->CreateEx
224:     (
225:         WS_EX_CLIENTEDGE,       //DWORD dwExStyle
226:         _T("EDIT"),             //LPCTSTR lpszClassName
227:         strMsg.GetBuffer(),     //LPCTSTR lpszWindowName
228:         WS_CHILD | WS_VISIBLE,  //DWORD dwStyle
229:         CRect(10, 13, 333, 37), //const RECT& rect
230:         this,                   //CWnd* pParentWnd
231:         ID_EDIT                 //UINT nID
232:     );
233:
234: #endif
235:
236:     m_pEdit->SetFont(m_pFont);
237: }
                                                                                                                                                            

※ 위 글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론, 퍼가신다면 영광이구요. 우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^

프로젝트 : DynamicCreateEditControl.zip

by greenfrog | 2008/08/30 21:31 | C++ / WIN32 / MFC | 트랙백 | 덧글(3)
트랙백 주소 : http://greenfrog7.egloos.com/tb/767740
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by -A2- at 2008/08/31 00:06
댓글 달아주셨길래 답방왔어요. ㅋ
여기 스킨이 제가 스킨을 수정하기 전에 모습이라 왠지 정겹네요. ㅎㅎ
Commented by greenfrog at 2008/08/31 09:22
ㅎㅎ A2님 반갑습니다 ~ 이 스킨이 22인치 모니터에서 보기 가장 좋은 것 같아요 ~ ㅎㅎㅎ

Commented by ㅇㅇ at 2012/12/20 11:16
api에서 보면 컨트롤 생성할때도 윈도우 만들때처럼 생성해서 그런듯..

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>