ComboBox DropDowns의 텍스트가 모두 최종 매개 변수로 DT_SINGLELINE | DT_VCENTER를 구문 분석하는 pDC-> DrawText 함수를 사용하여 의 가운데에 맞도록 응용 프로그램을 수정하는 DrawItem 재정의 메서드를 작성했습니다. 현재 내가 가지고있는 문제는 DropDown에서 첫 번째 값을 반복 할 수 있지만 모든 값 목록을 DropDown에 표시하고 싶습니다. MFC ComboBox DrawItem 문제
응용 프로그램의 다른 컨트롤과 같이 근본적인 결함이있는 경우 확실하지 않습니다. ListCtr lpDrawItemStruct-> itemData 은 DrawItem 재정의가 호출 될 때 채워진 것처럼 보입니다. 그러나 ComboBox lpDrawItemStruct-> itemData의 경우에는 비어있는 것으로 표시됩니다.
누구든지 도와 드릴 수 있습니까? 아래는 지금까지의 코드입니다. 당신이 lpDrawItemStruct->itemID
를 사용하지만 항상 m_strListEntry
에서 첫 번째 항목을 추출하지 않는 것처럼
void CFCDropDown::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC) ;
int nSavedDC = pDC->SaveDC();
//I can't use the following because at this stage lpDrawItemStruct->itemData doesn't contain anything
//LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData ;
//I do however have access to a member variable that contains the list of items I want in the drop down
//m_strListEntry contains a CString of format "ONE;TWO;THREE;FOUR;FIVE;SIX"
CString strFieldValue = m_strListEntry ;
int noOfItems = GetCount();
CString item;
int iStartPos = 0;
int iFirstDelimiter = 0;
iFirstDelimiter = m_strListEntry.Find(LISTDELIMITER,iStartPos);
int i = iFirstDelimiter + 1;
int iStrLen = strFieldValue.GetLength();
int iNewLen = iStrLen - ++iFirstDelimiter;
item = strFieldValue.Left(i -1) ;
LPCTSTR lpszText = (LPCTSTR)item ;
//At the moment I'm getting "ONE" repeated 6 times. I want a list of all the values displayed in the DropDown.
pDC->DrawText(lpszText, strlen(lpszText), &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER) ;
pDC->RestoreDC(nSavedDC);
}
리소스 편집기의 데이터 속성을 통해 ComboBox 내용을 추가하는 경우 '문자열 있음'도 사용할 수 있습니다. 그런 다음 GetLBText (lpDIS-> itemID, strItem);로 그릴 텍스트를 얻을 수 있습니다. 그렇지 않으면'm_strListEntry'가 설정 될 때마다 ComboBox를 채 웁니다. –