Dialog上的List Control获得焦点时,窗口切换后不显示
使用环境和现象都跟http://topic.csdn.net/t/20010509/15/115868.html描述的一样。那里只是说“有时”会出现这种情况,我这里试验的结果是:如果List Control没有获得焦点,一切正常。只要获得了焦点,无论有没有记录被选中,当用其它窗口覆盖后,或者最小化再恢复,都不会显示了。
我试过很多办法,发现响应List Control的NM_SETFOCUS通知消息,在里面调用该Control的Invalidate(),可以将它显示出来。
ON_NOTIFY(NM_SETFOCUS, IDC_LIST_DEV_SERV, OnSetfocusListDevServ)
void DevServiceDlg::OnSetfocusListDevServ(NMHDR* pNMHDR, LRESULT* pResult)
{
m_devSvc.Invalidate();
*pResult = 0;
}
但这样的结果是边框没有了,就跟没选WS_BORDER风格一样,看起来很不舒服。我Spy++了一下,感觉应该是没有收到WM_NCPAINT,没有重绘非客户区域所致。
于是我找了一下哪些操作会发WM_NCPAINT,试了一下RedrawWindow()和ShowWindow(SW_SHOWNOACTIVATE),发现非但没有解决问题,反而回到最初的情况,整个List Control都不显示了。
但如果切换Tab再换回来,是可以显示的。这里的流程是:
ShowWindow(SW_SHOW);
UpdateWindow();
Invalidate();
我如法炮制,没有效果,因为窗口原来就是Visible的,ShowWindow()似乎不起作用。而我如果在前面加上ShowWindow(SW_HIDE),焦点又失去了。
对窗口和消息还是不熟悉,现在都在Program by Coincidence了,希望大牛们给予一定的提示。
我试过很多办法,发现响应List Control的NM_SETFOCUS通知消息,在里面调用该Control的Invalidate(),可以将它显示出来。
ON_NOTIFY(NM_SETFOCUS, IDC_LIST_DEV_SERV, OnSetfocusListDevServ)
void DevServiceDlg::OnSetfocusListDevServ(NMHDR* pNMHDR, LRESULT* pResult)
{
m_devSvc.Invalidate();
*pResult = 0;
}
但这样的结果是边框没有了,就跟没选WS_BORDER风格一样,看起来很不舒服。我Spy++了一下,感觉应该是没有收到WM_NCPAINT,没有重绘非客户区域所致。
于是我找了一下哪些操作会发WM_NCPAINT,试了一下RedrawWindow()和ShowWindow(SW_SHOWNOACTIVATE),发现非但没有解决问题,反而回到最初的情况,整个List Control都不显示了。
但如果切换Tab再换回来,是可以显示的。这里的流程是:
ShowWindow(SW_SHOW);
UpdateWindow();
Invalidate();
我如法炮制,没有效果,因为窗口原来就是Visible的,ShowWindow()似乎不起作用。而我如果在前面加上ShowWindow(SW_HIDE),焦点又失去了。
对窗口和消息还是不熟悉,现在都在Program by Coincidence了,希望大牛们给予一定的提示。
...全文
相关推荐
VS2010 MFC之List Control控件的使用
List Control是MFC中一个非常实用的控件,它允许用户以列表的形式展示数据,可以进行多列显示、排序、选择等操作。
可编辑的list control
同时,需要监听编辑控件的EN_KILLFOCUS消息,当编辑完成失去焦点时,更新List Control对应项的数据。2.
MFC连接SqlServer数据库,并将查询的数据显示到listCtrl控件上
而List Control则是一种常用的界面元素,用于显示多列数据。首先,我们需要设置MFC应用程序的基本框架,创建一个基于对话框的应用程序,并在对话框中添加一个List Control控件。
MFC ListControl控件显示文件夹和文件.zip
接下来,我们需要重载OnCreate()函数,以便在对话框加载时初始化List Control。这里,我们可以设置List Control的样式,使其支持图标显示,例如LVS_ICON。
Dialog几个例子
ALV Grid Control的应用ALV (Application List Viewer) 是SAP中用于展示列表数据的一种控件,广泛应用于各种ABAP应用程序中。


界面
