ComboBox의 ListBox의 크기를 바꾸는 방법
ComboBox의 CWnd::OnCtlColor()를 처음 부를 때, ListBox의 핸들을 알아내고 이것을 이용해서 ListBox의 크기를 바꾸어 준다.
[code]
BOOL m_bRectFirst = TRUE;
BOOL m_bCtrlFirst = TRUE;
HBRUSH CNewComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_LISTBOX){
if (m_bRectFirst){
pWnd->GetWindowRect(m_rcListBox);
m_bRectFirst = FALSE;
}
if (m_bCtrlFirst){
m_bCtrlFirst = FALSE;
pWnd->MoveWindow(m_rcListBox.left, m_rcListBox.top,
m_rcListBox.Width() + 100,
m_rcListBox.Height(), TRUE);
// 100만큼 늘려 준다.
}
else{
m_bCtrlFirst = TRUE;
}
}
return CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
}
[/code]
여기에서 m_bRectFirst의 기능은 ListBox Control이 처음 보일 때를 감지하기 위한 것이다. 그리고, m_bCtrlFirst가 사용된 이유는 처음 MoveWindow()가 실행되어서 크기가 조정되면 ListBox가 다시 그려지므로, 다시 CWnd::OnCtlColor()라 불려진다. 그러면, 다시 MoveWindow()가 불려져서 다시 OnCtlColor()가 불려지는 것이 계속 반복이 될 것이다. 그래서, 이것을 막기 위해서 m_bCtrlFirst를 플래그로 두어서 MoveWindow()때문에 불러지는 OnCtlColor()는 무시하도록 했다.
ComboBox의 CWnd::OnCtlColor()를 처음 부를 때, ListBox의 핸들을 알아내고 이것을 이용해서 ListBox의 크기를 바꾸어 준다.
[code]
BOOL m_bRectFirst = TRUE;
BOOL m_bCtrlFirst = TRUE;
HBRUSH CNewComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_LISTBOX){
if (m_bRectFirst){
pWnd->GetWindowRect(m_rcListBox);
m_bRectFirst = FALSE;
}
if (m_bCtrlFirst){
m_bCtrlFirst = FALSE;
pWnd->MoveWindow(m_rcListBox.left, m_rcListBox.top,
m_rcListBox.Width() + 100,
m_rcListBox.Height(), TRUE);
// 100만큼 늘려 준다.
}
else{
m_bCtrlFirst = TRUE;
}
}
return CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
}
[/code]
여기에서 m_bRectFirst의 기능은 ListBox Control이 처음 보일 때를 감지하기 위한 것이다. 그리고, m_bCtrlFirst가 사용된 이유는 처음 MoveWindow()가 실행되어서 크기가 조정되면 ListBox가 다시 그려지므로, 다시 CWnd::OnCtlColor()라 불려진다. 그러면, 다시 MoveWindow()가 불려져서 다시 OnCtlColor()가 불려지는 것이 계속 반복이 될 것이다. 그래서, 이것을 막기 위해서 m_bCtrlFirst를 플래그로 두어서 MoveWindow()때문에 불러지는 OnCtlColor()는 무시하도록 했다.
'Windows > MFC' 카테고리의 다른 글
툴바(ToolBar)의 속성을 바꾸는 방법 (0) | 2013.10.02 |
---|---|
컨트롤 바(Control bar)를 보이거나 숨기는 방법 (0) | 2013.10.02 |
콤보박스 (ComboBox)의 리스트 컨트롤(ListBox Control)을 알아내는 방법 (0) | 2013.10.02 |
컨트롤 배경색 변경하기 (SetTextColor,SetBkMode) (0) | 2013.10.02 |
서브 클래싱 (SubClassing) (0) | 2013.10.02 |