SetWindowRgn引发的血案

lironghua2012 2011-06-24 11:36:19
1.创建一个对话框项目
2.响应WM_CREATE和WM_SIZE消息,加入如下代码
C/C++ code
CRect rtWnd;
GetWindowRect(&rtWnd);
CRgn rgn;
rgn.CreateRoundRectRgn(0,0,rtWnd.Width(),rtWnd.Height(),15,15);

SetWindowRgn(0,true);
SetWindowRgn((HRGN)rgn,true);

Invalidate();


3.对话框添加一个listctrl
4.在WM_INITDIALOG添加licstrl的初始化
C/C++ code
m_list.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);

m_list.InsertColumn(0,_T("上海探戈"),LVCFMT_CENTER,100);
m_list.InsertColumn(1,_T("白发魔女传"),LVCFMT_CENTER,100);
m_list.InsertColumn(2,_T("笑傲江湖"),LVCFMT_CENTER,100);
m_list.InsertColumn(3,_T("射雕英雄"),LVCFMT_CENTER,100);
m_list.InsertColumn(4,_T("沧海一声笑"),LVCFMT_CENTER,100);

for(int i=0;i<=3;i++)
{
m_list.InsertItem(i,L"许文强");
m_list.SetItemText(i,1,L"卓一航");
m_list.SetItemText(i,2,L"东方不败");
m_list.SetItemText(i,3,L"大漠飞鹰");
m_list.SetItemText(i,4,L"滔滔两岸潮");
}



:注意listctrl要显示水平滚动条

OK,此时编译和开启程序都没什么问题,但是, 鼠标移动主窗口后,再点击listctrl的滚动条箭头时发现没响应。

遇到问题跟下面帖子现象类似。
http://topic.csdn.net/u/20091026/11/72393896-6c8c-4c9d-83be-9859577935b2.html

这个帖子的方法并不能解决问题!!


急!急!!急!!!
求解
...全文
395 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lironghua2012 2011-07-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091026/11/72393896-6c8c-4c9d-83be-9859577935b2.html


正解!!!
lironghua2012 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lyyscf 的回复:]
这个问题我也遇到过,不过没用SetWindowRgn
应该是电脑或系统的问题..
[/Quote]

去除SetWindowRgn后,一切正常了
zgl7903 2011-06-24
  • 打赏
  • 举报
回复
把怀疑可能引发问题的代码屏蔽了,再看是否正常
邓学彬 2011-06-24
  • 打赏
  • 举报
回复
在多个工程里应用过SetWindowRgn,并未发现对子窗口有影响.
czydxj 2011-06-24
  • 打赏
  • 举报
回复
将SetWindowRgn代码放在对话框初始化OnInitDialog()函数中应该没问题了吧
czydxj 2011-06-24
  • 打赏
  • 举报
回复
我试了一下,没问题呀!
lyyscf 2011-06-24
  • 打赏
  • 举报
回复
这个问题我也遇到过,不过没用SetWindowRgn
应该是电脑或系统的问题..
lironghua2012 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pop1210 的回复:]
引用 9 楼 lironghua2012 的回复:
引用 2 楼 czydxj 的回复:
将SetWindowRgn代码放在对话框初始化OnInitDialog()函数中应该没问题了吧


可以百分百确定是SetWindowRgn引起的,请下载:
http://download.csdn.net/source/3392387

“鼠标移动主窗口后,再点击listctrl的滚动条箭头……
[/Quote]

看来这个问题果然很隐蔽,请参看我录制的操作录像:
http://download.csdn.net/source/3392603
可以很明显的看到滚动条失去了作用
pop1210 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lironghua2012 的回复:]
引用 2 楼 czydxj 的回复:
将SetWindowRgn代码放在对话框初始化OnInitDialog()函数中应该没问题了吧


可以百分百确定是SetWindowRgn引起的,请下载:
http://download.csdn.net/source/3392387
[/Quote]
“鼠标移动主窗口后,再点击listctrl的滚动条箭头时发现没响应。”这样操作吗,下载了你的exe直接运行没问题啊?
lironghua2012 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 czydxj 的回复:]
将SetWindowRgn代码放在对话框初始化OnInitDialog()函数中应该没问题了吧
[/Quote]

可以百分百确定是SetWindowRgn引起的,请下载:
http://download.csdn.net/source/3392387
lironghua2012 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cometnet 的回复:]
在多个工程里应用过SetWindowRgn,并未发现对子窗口有影响.
[/Quote]

多谢关注,请下载这个项目:
http://download.csdn.net/source/3392387
release是生成的问题程序,鼠标拖动窗口标题栏,往左移动一个距离,鼠标按住不放,再往右拖动一下,此时点击listctrl滚动条的左右箭头,你将会发现系统的滚动条不做任何响应!
jiejieaiai 2011-06-24
  • 打赏
  • 举报
回复
SetWindowRgn放到OnInitDialog里面,初始化的时候把对话框切割
kyotrue 2011-06-24
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
路过的说

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧