Resuelva el problema de que el duilib de código abierto de NetEase viene con RichEdit y el teclado no se puede ingresar en algunos sistemas

fenómeno

Recientemente, duilib basado en el mantenimiento de código abierto de NetEase se ha convertido en un cliente. Después de conectarse, los usuarios informaron una serie de problemas. El problema más extraño es que RichEdit a veces no se puede ingresar.
Inserte la descripción de la imagen aquí

encuesta

Después de probar con el ejemplo oficial, se encontró que también hay problemas:

El XML de estos dos RichEdits es el siguiente:

<!-- 单行文本 -->
<RichEdit class="simple input" height="30" margin="0,3" padding="6,6,6" promptmode="true" prompttext="Single line text control" promptcolor="lightcolor"/>

<!-- 多行文本 -->
<RichEdit class="prompt" name="edit" bkcolor="bk_wnd_lightcolor" width="stretch" height="stretch" 
            multiline="true" vscrollbar="true" hscrollbar="true" autovscroll="true" 
            normaltextcolor="darkcolor" wantreturnmsg="true" rich="true"/>

Solución

Después de cambiar constantemente la prueba de estilo, hay 2 formas:

  • Cambie class = "entrada simple" en el texto de una sola línea a class = "entrada"
  • El estilo simple se define en global.xml, busque la definición de simple en este archivo y elimine wanttab = "false"
<Class name="simple" multiline="false" autohscroll="true" wantreturnmsg="true" rich="false" normaltextcolor="darkcolor" disabledtextcolor="textdefaultdisablecolor"/>
<!-- <Class name="simple" multiline="false" autohscroll="true" wantreturnmsg="true" wanttab="false" rich="false" normaltextcolor="darkcolor" disabledtextcolor="textdefaultdisablecolor"/> -->

Por lo tanto, finalmente se determina que existe una relación con wanttab = "false".

Siguiente pregunta

Después de eliminar wanttab = "false", encontré que el cuadro de entrada de nombre de usuario y contraseña, al presionar Tab cuando el nombre de usuario, agregará una pestaña \ t en lugar de una nueva línea , así que necesito continuar resolviéndolo.

Después de leer cuidadosamente el código relevante de duilib después de la modificación de NetEase, procese manualmente en RichEdit \ t para ajustar.

void RichEdit::OnChar(EventArgs& event)
{
    
    
	//TAB
	if (::GetKeyState(VK_TAB) < 0) {
    
    
		if (!m_bWantTab) {
    
    
			if (m_pWindow != NULL)
				m_pWindow->SendNotify((Control*)this, kEventTab);
			return;
		}

		// added_by [email protected] 2021-01-28 tab ignore
		// m_bWantTabEx是新增的属性,需要外部主动赋值。
		if (!m_bWantTabEx) {
    
    
			if (m_pWindow != NULL)
				m_pWindow->SetNextTabControl(::GetKeyState(VK_SHIFT) >= 0);
			return;
		}
	}
	//Number
	if (m_bNumberOnly) {
    
    
		if (event.wParam < '0' || event.wParam > '9')
			return;
	}

	TxSendMessage(WM_CHAR, event.wParam, event.lParam, NULL);
}

Suponiendo que la interfaz de inicio de sesión se llama LoginForm, en InitWindow, llame a SetWantTabEx (función adicional agregada para resolver el problema que algunas computadoras no pueden ingresar) para configurarlo.

void LoginForm::InitWindow() {
    
    
	// ...
    passwd_ = static_cast<ui::RichEdit*>(FindControl(L"passwd"));
    ed_phone_ = static_cast<ui::RichEdit*>(FindControl(L"ed_phone"));
    ed_sms_ = static_cast<ui::RichEdit*>(FindControl(L"ed_sms"));

    // SetWantTabEx是新增的函数,自己可以在RichEdit.h中新增即可。
	ed_phone_->SetWantTabEx(false);
	passwd_->SetWantTabEx(false);
	ed_sms_->SetWantTabEx(false);
	
	// ...
}

posdata

El sitio web oficial no se ha actualizado durante más de un año y he mantenido todos los problemas encontrados en el archivo README.md de esta rama. Si lo necesita, mueva:

Supongo que te gusta

Origin blog.csdn.net/xmcy001122/article/details/113343899
Recomendado
Clasificación