多行字符串控件在高度较小,内容行数较多时,会出现竖直滚动条,默认滚动位置是在最低端。如果想要给多行字符串控件设置完内容后,滚动条显示在最顶端,需要用到WINAPI进行设置。
用Microsoft Spy++获取到多行字符串控件内,其实是类名为RICHEDIT50W的窗口,即可设置滚动条位置来将内容滚动到想要的位置。
以往运用winapi相关文章:
直接放代码:
#include <uf.h>
#include <uf_ui.h>
UF_initialize();
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
TCHAR className[200] = TEXT("");
GetClassName(hwndChild, className, 200);
//UF_UI_open_listing_window();//调试用
//UF_UI_write_listing_window(className);
//UF_UI_write_listing_window("\n");
if (strcmp(className, "RICHEDIT50W") == 0)//将名称与类名称进行匹配,找到控件
{
int iPos = 0;//滚动条位置,0表示最顶端
SetScrollPos(hwndChild, SB_VERT, iPos, TRUE);//设置滚动条位置
SendMessage(hwndChild, WM_VSCROLL, MAKELONG(SB_THUMBTRACK, iPos), NULL);//发送消息
}
return TRUE;
}
/*关闭当前窗口*/
void setTheScrollPos()
{
HWND hd = GetForegroundWindow(); //得到当前UG进程窗口(稳妥起见,hd在dialogshow中获取)
EnumChildWindows(hd,EnumChildProc,0);//遍历窗口中所有子控件(在EnumChildProc回调中进行处理)
}
int main()
{
setTheScrollPos();
}
UF_terminate();
参考博客:
MFC滚动条自动对齐:一个grid选中一行另一个grid也选中相同行并且内容和滚动条自动对齐_mfc gridctrl滚动条-CSDN博客