仿QQ2011界面 意见征求

geniusice18 2011-06-10 10:03:56

发了个仿QQ2011界面的源码
源码和效果图在这 仿QQ2011界面 MFC

所以请大家看过代码的给点意见,和建议了,看佬地方要怎么改比较好

特别是控件的事件响应处理方法



先谢过
...全文
1360 99 打赏 收藏 转发到动态 举报
写回复
用AI写文章
99 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniusice18 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 98 楼 ncliang 的回复:]

for (int i = 0; i < m_vecArea.size(); i++)
{
CControlBase * pControlBase= m_vecArea.at(i);

if (pControlBase)
{
pControlBase->Draw(dc, m_pt, m_rcUpdate, m_bIsLButtonDown);
}
}

什么意思?主要是m_v……
[/Quote]

这个主要是有好多个Area吗
ncliang 2011-11-09
  • 打赏
  • 举报
回复
for (int i = 0; i < m_vecArea.size(); i++)
{
CControlBase * pControlBase= m_vecArea.at(i);

if (pControlBase)
{
pControlBase->Draw(dc, m_pt, m_rcUpdate, m_bIsLButtonDown);
}
}

什么意思?主要是m_vecArea.size() 和m_vecArea.at(i);不懂。。为什么要循环?
pop1210 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 geniusice18 的回复:]
C/C++ code

BOOL CDlgBase::OnNcActivate(BOOL bActive)
{
m_bNCActive = (bool)bActive;
if (!bActive)
{
if (m_bIsSetCapture)
{
ReleaseCapture();//客户区释放鼠标 ……
[/Quote]

楼主,之前的那个bug(处理alt+tab键或"开始菜单"键的)还记得不?
标准做法应该是处理WM_CANCELMODE消息~嗯
alexmayer 2011-06-27
  • 打赏
  • 举报
回复
虽然工作根本不涉及界面,但业余时间对这个挺感兴趣,支持!
geniusice18 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 pop1210 的回复:]
引用 90 楼 geniusice18 的回复:
自己顶一个

还在看呐ing,,
周末看了个其他例子,楼主又有新进展了呗?
[/Quote]

没呢,最近忙其他事
pop1210 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 90 楼 geniusice18 的回复:]
自己顶一个
[/Quote]
还在看呐ing,,
周末看了个其他例子,楼主又有新进展了呗?
pop1210 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 91 楼 watzds 的回复:]
QQ2011边缘有大概7像素的透明区域,不知道有什么用,还有怎么实现?
[/Quote]
磨砂玻璃效果?GDI+,png贴图,原理是这个,代码的话参考http://topic.csdn.net/u/20110623/08/bdbb3860-140c-4073-8c25-e4f91bc86feb.html?11789
tianbinguan 2011-06-24
  • 打赏
  • 举报
回复
不错,研究研究!
WATZDS 2011-06-24
  • 打赏
  • 举报
回复
QQ2011边缘有大概7像素的透明区域,不知道有什么用,还有怎么实现?
geniusice18 2011-06-23
  • 打赏
  • 举报
回复
自己顶一个
pop1210 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 87 楼 geniusice18 的回复:]
引用 85 楼 pop1210 的回复:
引用 82 楼 geniusice18 的回复:
引用 81 楼 pop1210 的回复:
请问你是怎么把CDlgBase的边框去掉的(就是不让系统画边框,系统画的太粗了),
我把你代码改成这样:
C/C++ code

int CDlgBase::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if ……
[/Quote]
明白了,谢谢,去边框是由ON_WM_CREATE、ON_WM_NCCALCSIZE、ON_WM_NCACTIVATE共同完成的。
PS:
MSDN对OnNcActive的解释:
[返回值]
Nonzero if Windows should proceed with default processing; 0 to prevent the caption bar or icon from being deactivated.
意思是当bActive==True时如果调用基类的OnNcActivate默认会画活动时的标题栏和边框,当bActive==False时会画非活动时的标题栏和边框(bActive的值是系统传给对话框的)。如果不这么做就(不调基类)直接返回0;
故上面的CDlgBase::OnNcActivate返回值最好改为return 0;

geniusice18 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 88 楼 pop1210 的回复:]
引用 87 楼 geniusice18 的回复:
引用 85 楼 pop1210 的回复:
引用 82 楼 geniusice18 的回复:
引用 81 楼 pop1210 的回复:
请问你是怎么把CDlgBase的边框去掉的(就是不让系统画边框,系统画的太粗了),
我把你代码改成这样:
C/C++ code

int CDlgBase::OnCreate(LPCREATESTRU……
[/Quote]


好的,
geniusice18 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 79 楼 yjukh 的回复:]
用VC8编译出错
error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CDlgBase::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
1> Cast from base to derived requires dynamic_cast or st……
[/Quote]

UINT CDlgBase::OnNcHitTest(CPoint point)

把UINT 换成 LRESULT
yjukh 2011-06-20
  • 打赏
  • 举报
回复
用VC8编译出错
error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CDlgBase::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
1> Cast from base to derived requires dynamic_cast or static_cast
iqyely 2011-06-20
  • 打赏
  • 举报
回复
呵呵,来关注下。
geniusice18 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 76 楼 pop1210 的回复:]
引用 75 楼 geniusice18 的回复:
引用 74 楼 pop1210 的回复:

弄不出来了,嗨~


什么呢

郁闷的问不出问题啊?我有你qq,你怎么都不上qq哩?
[/Quote]

在家一般不上Q的
geniusice18 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 85 楼 pop1210 的回复:]
引用 82 楼 geniusice18 的回复:
引用 81 楼 pop1210 的回复:
请问你是怎么把CDlgBase的边框去掉的(就是不让系统画边框,系统画的太粗了),
我把你代码改成这样:
C/C++ code

int CDlgBase::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpC……
[/Quote]

以前是这样
BOOL CDlgBase::OnNcActivate(BOOL bActive)
{
m_bNCActive = (bool)bActive;
return TRUE;
}

geniusice18 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 85 楼 pop1210 的回复:]
引用 82 楼 geniusice18 的回复:
引用 81 楼 pop1210 的回复:
请问你是怎么把CDlgBase的边框去掉的(就是不让系统画边框,系统画的太粗了),
我把你代码改成这样:
C/C++ code

int CDlgBase::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpC……
[/Quote]

以前是有的, 不过只是这样
BOOL CDlgBase::OnNcActivate(BOOL bActive)
{
m_bNCActive = (bool)bActive;
if (!bActive)
{
if (m_bIsSetCapture)
{
ReleaseCapture();//客户区释放鼠标
m_bIsSetCapture = false;
}
m_bIsLButtonDown = FALSE;
}

return TRUE;
}


中间加的只是改了这个
[Quote=引用 32 楼 pop1210 的回复:]
引用 26 楼 hkf314 的回复:
引用 23 楼 pop1210 的回复:
楼主,看下面测得到不?

[环境]
Win7

[描述]
1. 鼠标左键按住一个图片按钮不放,比如[6]那个;
2. 按键盘上的"Alt+Tab"组合键或"开始"键;
3. 将鼠标移出窗口后再放开鼠标;
4. 然后再用鼠标操作窗口时回发现图片按钮的状态未更新;

[补充]
其他OS没测,窗……
[/Quote]
pop1210 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 82 楼 geniusice18 的回复:]
引用 81 楼 pop1210 的回复:
请问你是怎么把CDlgBase的边框去掉的(就是不让系统画边框,系统画的太粗了),
我把你代码改成这样:
C/C++ code

int CDlgBase::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
ret……
[/Quote]
应该不是,你原来的代码也没处理这个CDlgBase::OnNcActivate吧,
现在只是想不让系统画CDlgBase的边框,和其他无关。
我回家再看Win7的好了,
psbeond 2011-06-20
  • 打赏
  • 举报
回复
这儿有个仿QQ2006的,很早以前写的:


下载地址:http://www.iuishop.com/index.php?option=com_docman&task=doc_download&gid=7&Itemid=54
加载更多回复(79)

15,979

社区成员

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

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