MFC 대화 상자에서 일부 컨트롤을 동적으로 만들어야합니다. 지금까지는 생성이 제대로 작동하지만 동적으로 생성 된 컨트롤은 리소스 편집기로 만든 컨트롤과 다르게 보입니다. 일부 컨트롤은 다른 방식으로 작동합니다. 내 생각에, 생성 된 코드가 수행하는 초기화 중 일부가 누락되었습니다.MFC 컨트롤을 동적으로 생성 할 때 리소스 편집기에서 사용하는 스타일을 다시 만드는 방법은 무엇입니까?
현재 나는 CStatic
및 CEdit
컨트롤 만 만듭니다. 둘 다 동적으로 만들 때 표준 Windows 글꼴을 사용하지 않습니다 (글꼴이 Windows 95 이전에 사용 된 기본 글꼴과 비슷하게 보입니다. 올바르게 기억하는 경우).
또한 CEdit
컨트롤은 리소스 편집기로 컨트롤을 만들 때와 다르게 동작합니다. 동적으로 생성 된 컨트롤은 텍스트 길이를 보이는 크기로 제한하는 것으로 보입니다. SetWindowText()
으로 긴 텍스트를 설정하고 GetWindowText()
으로 전체 텍스트를 다시 읽을 수 있지만 표시된 크기보다 긴 텍스트를 입력 할 수는 없습니다. CEdit
리소스 편집기에서 만든 컨트롤이 다르게 동작합니다. 사용자가 표시 할 수있는 것보다 긴 텍스트를 입력하면 입력 된 텍스트가 컨트롤 내에서 "스크롤"됩니다 (스크롤 막대가없고 단 한 줄 컨트롤처럼).
컨트롤에 SetLimitText()
을 호출하여이 문제를 해결했지만 동작을 변경하지 않았습니다.
컨트롤
은 대화 상자 클래스에 정의 된 배열로 저장됩니다 컨트롤의 생성 대화 수준의OnInitDialog()
방법에서 발생
CStatic** m_pLabels;
CEdit** m_pEdits;
: 대한
for (int i = 0; i < max; i++)
{
m_pLabels[i] = new CStatic();
m_pLabels[i]->Create("key", WS_CHILD | WS_VISIBLE | SS_RIGHT,
CRect(10, 10 + i * 30, 130, 35 + i * 30), this);
m_pEdits[i] = new CEdit();
m_pEdits[i]->CreateEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_BORDER,
CRect(133, 10 + i * 30, 350, 35 + i * 30), this, i + 100);
m_pEdits[i]->SetLimitText(499);
m_pEdits[i]->SetWindowText("value to be edited");
}
주셔서 감사합니다 도움!
각 질문에 대답 할 때 "받아 들인 답"으로 선택해야하는 답을 모르겠습니다. 여기 정상적인 절차는 무엇입니까? – Xperimental
좋은 질문입니다 - 확실하지 않습니다! 가장 유익한 것을 선택하고 받아 들일 것을 제안합니다. 당신이 한 일에 대해 설명 할 수있는 몇 가지 의견이 있습니다. – DavidK
또 다른 가능한 해결책은 나 자신이 질문에 대답하고 대답을 인용 한 다음 내 대답을 받아 들인 답으로 선택하는 것입니다. 아니면 "최종 솔루션에 대한 다른 대답 읽기"와 같은 대답을 할 수 있습니다. – Xperimental