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

이번에는 저번 에디트 컨트롤 동적 생성의 2탄!! 컨트롤을 여러개 동적으로 생성하는 내용을 정리해 보겠습니다.

컨트롤을 한개 생성하거나 여러개 생성하는 것은 기본 개념적으로 똑같지만 한가지 주의해야 할 점이 좌표를 이동시켜야 하는 점과

동적으로 생성한 컨트롤의 메모리를 잘 관리해주어야 한다는 것입니다. C++로 프로그래밍 할 때 어려움 중 하나가 메모리 관리인것

같습니다. 저 같은 경우 vector<cwnd*> m_vWindows; 멤버 변수를 선언하고 여기에 동적으로 생성한 컨트롤을 담고 프로세스가

종료할 때 소멸자에서 메모리를 해제해주는 방법을 사용하였습니다.

165: 
166: //동적으로 에디트 컨트롤을 생성합니다 ~
167: void CDynamicCreateEditControlsDlg::DynamicCreateEditControls(void)
168: {
169: CString strWndName = _T("");
170:
171: //최초로 생성되는 윈도우의 좌표
172: CRect rect(10, 10, 100, 50);
173:
174: //생성 할 윈도우의 폭과 높이를 계산합니다 ~
175: const int width = rect.right-rect.left;
176: const int height = rect.bottom-rect.top;
177:
178: //각 컨트롤 간의 간격입니다 ~
179: const int space = 3;
180:
181: int nCount = 0;
182: for(int i=0; i<2; i++)
183: {
184: //옆으로 이동 시킵니다.
185: rect.left += ((width+space)*i);
186: rect.right += ((width+space)*i);
187:
188: //아래로 이동 시킵니다.
189: for(int j=0; j<4; j++)
190: {
191: strWndName.Format("Window %d", nCount+1);
192:
193: //백터에 CEdit를 new 연산자를 이용해서 생성하고 있습니다. 꼭 소멸자에서 메모리 해제 해주세요 ~
194: m_vWindows.push_back(new CEdit);
195: m_vWindows[nCount]->CreateEx
196: (
197: WS_EX_CLIENTEDGE,
198: _T("EDIT"),
199: strWndName.GetBuffer(),
200: WS_CHILD | WS_VISIBLE | WS_BORDER,
201: CRect(rect.left, rect.top+((height+space)*j), rect.right, rect.bottom+((height+space)*j)),
202: this,
203: ID_EDIT+nCount
204: );
205: nCount++;
206: }
207: }
208: }




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

프로젝트 : DynamicCreateEditControls.zip

by greenfrog | 2008/08/31 12:12 | C++ / WIN32 / MFC | 트랙백 | 덧글(0)
트랙백 주소 : http://greenfrog7.egloos.com/tb/769839
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



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