2009-06-09 26 views
6

Me pregunto cómo hacerlo. escribo:crear un control mediante programación utilizando MFC

CEdit m_wndEdit; 

y en el controlador de eventos botón (aplicación de diálogo), escribo:

m_wndEdit.Create(//with params); 

pero todavía no ven el control aparece en la interfaz de usuario.

De hecho, me escribió esto en el controlador de botón:

CWnd* pWnd = GetDlgItem(IDC_LIST1); 
CRect rect; 

pWnd->GetClientRect(&rect); 

//pWnd->CalcWindowRect(rect,CWnd::adjustBorder); 

wnd_Edit.Create(ES_MULTILINE | ES_NOHIDESEL | ES_READONLY,rect,this,105); 

wnd_Edit.ShowWindow(SW_SHOW); 

this->Invalidate(); 

id 105 no existe. (Lo usé en la función de miembro Create de CEdit). Solo lo puse ahí. ¿No se supone que es la identificación que quieres darle al nuevo control? ¿Debería existir ya?

+0

¿Comenzó con la creación de un proyecto MFC con un asistente en Visual Studio? – stanigator

+0

sí, creé un proyecto de MFC con un asistente. – Attilah

+0

¿Puedes dar los parámetros exactos usados ​​para la creación? –

Respuesta

4

Comprobar con el siguiente conjunto de indicadores como el ejemplo mencionado en MSDN:

pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_NOHIDESEL | ES_READONLY, 
     rect, this, 105); 
0

¿Cuál es wnd_Edit exactamente? Si se trata de una variable local en esa función, ese es probablemente el problema. El destructor CWnd destruye la ventana asociada con CWnd. Entonces cuando wnd_Edit sale del alcance, el cuadro de edición también se destruye. Si eso no es todo, verifique el valor de retorno de Crear(). ¿Es NULL? Si es así, verifique el valor de GetLastError().

4
  • El Invalidar() no es necesario

  • Añadir la bandera WS_VISIBLE a sus banderas crear, no es necesario el ShowWindow

  • está creando el botón en la ubicación donde IDC_LIST1 es - es probable que desee hacer pWdn-> Destroy() después de GetClientRect()

  • El ID que pase a Create() puede ser cualquier cosa, por supuesto, si desea manejar los mensajes de este botón más adelante, lo hará nos necesita e la identificación correcta. En ese caso, es más fácil agregar manualmente una entrada a resource.h.

  • ¿Qué quiere decir con 'puse este código en el botón controlador de eventos' - ¿qué botón? Una diferente de la que estás tratando de crear, ¿puedo esperar? ¿Su código se llama en absoluto, se detiene cuando coloca un punto de interrupción? ¿Cuál es el valor de wnd_Edit-> m_hWnd después de la llamada a Create()?

  • wnd_Edit es un miembro de su cuadro de diálogo, a la derecha, y no una variable local de función?

+1

Una cosa más, le falta la bandera WS_CHILD. Pruebe solo con WS_CHILD | WS_VISIBLE, esas son las dos únicas banderas que realmente necesitas para cualquier control. – Roel

Cuestiones relacionadas