VC 自绘标题栏 问题

studyhk 2011-07-22 09:45:31
VC 做了个浏览器,需要对标题栏及边框做美观处理,自绘标题栏后,运行 不会出现美观效果,要拖动一下或者最小化再显示后才会出现效果 查了下资料说是重绘问题 具体 该怎么解决哦

涉及到的自绘函数
void CMainFrame::DrawTitleBar(CDC *pDC)
void CMainFrame::OnNcMouseMove(UINT nHitTest, CPoint point)
void CMainFrame::OnNcLButtonDown(UINT nHitTest, CPoint point)
LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lrst=CFrameWnd::DefWindowProc(message, wParam, lParam);



if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{
CDC* pWinDC = GetWindowDC();
if (pWinDC)
DrawTitleBar(pWinDC);
ReleaseDC(pWinDC);
}
return lrst;
}
void CMainFrame::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CFrameWnd::OnPaint();
}
}
...全文
278 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
studyhk 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]

放在WindowProc虚函数处理WM_NCPAINT消息就可以了吧~
[/Quote]

LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{
switch(message){
case WM_USER+1: //如果是用户定义的消息
if(lParam==WM_LBUTTONDOWN) //WM_LBUTTONDBLCLK不怎么灵
{
//鼠标单击时主窗口出现
::SetForegroundWindow(this->m_hWnd); //::SetWindowPos(this->m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
// WindowlsHide=false;
return 0;
}
else if(lParam==WM_RBUTTONDOWN) // && WindowIsHide
{
::SetForegroundWindow(this->m_hWnd); //将主框架窗口置前,左击其他地方,菜单消失
//鼠标右键单击弹出菜单
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* pMenu=menu.GetSubMenu(0);

//if (IsWindowVisible())// 根据对话框窗口的显示/隐藏状态修改菜单名称

//pMenu->EnableMenuItem(IDC_SHOW,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

//else

//pMenu->EnableMenuItem(IDC_HIDE,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

CPoint point;
GetCursorPos(&point);
pMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,AfxGetMainWnd());
::PostMessage(this->m_hWnd, WM_NULL, 0,0); //左击其他地方,菜单消失
menu.DestroyMenu();
return 0;
}
break;
case WM_SYSCOMMAND: //如果是系统消息
if(wParam==SC_MINIMIZE||wParam==SC_CLOSE||wParam==SC_MAXIMIZE||wParam==SC_SIZE)
{
//主窗口隐藏
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
// WindowIsHide=true;
return 0;
}
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}

上面这段是我处理托盘的相关代码
呔妖怪来嘛 2011-07-22
  • 打赏
  • 举报
回复
感觉像是 ,重绘之后窗口没有刷新
Eleven 2011-07-22
  • 打赏
  • 举报
回复
放在WindowProc虚函数处理WM_NCPAINT消息就可以了吧~
Eleven 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
你把你的DrawTitleBar(pWinDC);
放到OnPaint()中调用试试
[/Quote]
Sorry,看错了
Eleven 2011-07-22
  • 打赏
  • 举报
回复
你把你的DrawTitleBar(pWinDC);
放到OnPaint()中调用试试
studyhk 2011-07-22
  • 打赏
  • 举报
回复
大侠们多帮忙哦,,,或者 讲了思路也行
studyhk 2011-07-22
  • 打赏
  • 举报
回复
一直都有问题 改用VC皮肤 来美化界面了 参考http://blog.csdn.net/akof1314/article/details/5038769
的博客,不错,挺实用的,网上还有很多皮肤可以下载,

15,979

社区成员

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

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