// Copyright (c) Iuri Apollonio 1998
// Use & modify as you want & need, and leave those 3 lines.
// http://www.codeguru.com
// GfxOutBarCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"//"OutWAts1.h"
#include "GfxOutBarCtrl.h"
#include "GfxGroupEdit.h"
#include "GfxPopupMenu.h"
#define _ID_GFX_SMALLICON "小图标方式"
#define _ID_GFX_LARGEICON "大图标方式"
#define _ID_GFX_ADDAGROUP "添加组"
#define _ID_GFX_FONTCOLOR "改变字体颜色"
#define _ID_GFX_BACKCOLOR "改变背景颜色"
#define _ID_GFX_REMOVEITEM "从该组中删除"
#define _ID_GFX_RENAMEITEM "改名"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGfxOutBarCtrl
IMPLEMENT_DYNCREATE(CGfxOutBarCtrl, CWnd)
CGfxOutBarCtrl::CGfxOutBarCtrl()
{
crBackGroundColor = GetSysColor(COLOR_BACKGROUND);//RGB(0,128,128);//
crBackGroundColor1 = GetSysColor(COLOR_BACKGROUND);
crTextColor = GetSysColor(COLOR_WINDOW);
cr3dFace = GetSysColor(COLOR_3DFACE);
crLightBorder = GetSysColor(COLOR_3DLIGHT);
crHilightBorder = GetSysColor(COLOR_3DHILIGHT);
crShadowBorder = GetSysColor(COLOR_3DSHADOW);
crDkShadowBorder = GetSysColor(COLOR_3DDKSHADOW);
pBlackPen = new CPen(PS_SOLID, 1, RGB(0,0,0));
iFolderHeight = 22;
dwFlags = fDragItems|fEditGroups|fEditItems|fRemoveGroups|fRemoveItems|fAddGroups|fAnimation|fSelHighlight;
iSelFolder = 1;
iLastFolderHighlighted = -1;
iLastSelectedFolder = -1;
pLargeImageList = NULL;
pSmallImageList = NULL;
iFirstItem = 0;
xSmallIconLabelOffset = 4;
yLargeIconLabelOffset = 3;
ySmallIconSpacing = 10;
yLargeIconSpacing = 8;
xLeftMargin = 5;
yTopMargin = 5;
bUpArrow = bDownArrow = false;
hHandCursor = AfxGetApp()->LoadCursor(IDC_HANDCUR);
rcUpArrow = rcDownArrow = CRect(0,0,0,0);
bUpPressed = bDownPressed = false;
bLooping = false;
iLastItemHighlighted = -1;
bPressedHighlight = false;
iLastDragItemDraw = -1;
lAnimationTickCount = 10;
hDragCursor = AfxGetApp()->LoadCursor(IDC_DRAGGING);
hNoDragCursor = AfxGetApp()->LoadCursor(IDC_NODRAGGING);
iLastSel = -1;
iSelAnimCount = 0;
iSelAnimTiming = 0;
}
CGfxOutBarCtrl::~CGfxOutBarCtrl()
{
for (int t = 0; t < arFolder.GetSize(); t++)
{
if (arFolder.GetAt(t)) delete (CBarFolder*) arFolder.GetAt(t);
}
arFolder.RemoveAll();
delete pBlackPen;
}
BEGIN_MESSAGE_MAP(CGfxOutBarCtrl, CWnd)
//{{AFX_MSG_MAP(CGfxOutBarCtrl)
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
ON_WM_SIZE()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_GFX_LARGEICON, OnGfxLargeicon)
ON_UPDATE_COMMAND_UI(ID_GFX_LARGEICON, OnUpdateGfxLargeicon)
ON_COMMAND(ID_GFX_SMALLICON, OnGfxSmallicon)
ON_UPDATE_COMMAND_UI(ID_GFX_SMALLICON, OnUpdateGfxSmallicon)
ON_COMMAND(ID_GFX_REMOVEITEM, OnGfxRemoveitem)
ON_UPDATE_COMMAND_UI(ID_GFX_REMOVEITEM, OnUpdateGfxRemoveitem)
ON_COMMAND(ID_GFX_RENAMEITEM, OnGfxRenameitem)
ON_UPDATE_COMMAND_UI(ID_GFX_RENAMEITEM, OnUpdateGfxRenameitem)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnEndLabelEdit)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGfxOutBarCtrl message handlers
long CGfxOutBarCtrl::OnEndLabelEdit(WPARAM wParam, LPARAM lParam)
{
if (wParam == NM_OB_ONGROUPENDEDIT)
{
CGfxGroupEdit * pEdit = (CGfxGroupEdit *) lParam;
OUTBAR_INFO ob;
ob.index = pEdit->iIndex;
ob.cText = pEdit->text;
if (GetOwner()->SendMessage(WM_OUTBAR_NOTIFY, NM_OB_ONGROUPENDEDIT, (LPARAM) &ob))
{
SetFolderText(pEdit->iIndex, pEdit->text);
CRect rc;
GetFolderRect(pEdit->iIndex, rc);
InvalidateRect(rc, false);
}
}
if (wParam == NM_OB_ONLABELENDEDIT)
{
CGfxGroupEdit * pEdit = (CGfxGroupEdit *) lParam;
OUTBAR_INFO ob;
ob.index = pEdit->iIndex;
ob.cText = pEdit->text;
if (GetOwner()->SendMessage(WM_OUTBAR_NOTIFY, NM_OB_ONLABELENDEDIT, (LPARAM) &ob))
{
SetItemText(pEdit->iIndex, pEdit->text);
CRect rc;
GetInsideRect(rc);
InvalidateRect(rc, true);
}
}
return 0;
}
void CGfxOutBarCtrl::SetFolderText(const int index, const char * text)
{
ASSERT(index >= 0 && index < GetFolderCount());
CBarFolder * pbf = (CBarFolder *) arFolder.GetAt(index);
if (pbf->cName)
{
delete [] pbf->cName;
pbf->cName = NULL;
}
pbf->cName = new char [lstrlen(text)+1];
lstrcpy(pbf->cName, text);
}
void CGfxOutBarCtrl::SetItemText(const int index, const char * text)
{
ASSERT(iSelFolder >= 0 && iSelFolder < GetFolderCount());
CBarFolder * pbf = (CBarFolder *) arFolder.GetAt(iSelFolder);
CBarItem * pi = (CBarItem *) pbf->arItems.GetAt(index);
if (pi->cItem)
{
delete [] pi->cItem;
pi->cItem = NULL;
}
pi->cItem = new char [lstrlen(text)+1];
lstrcpy(pi->cItem, text);
}
BOOL CGfxOutBarCtrl::Create(DWORD dwStyle, const RECT & rect, CWnd * pParentWnd, UINT nID, const DWORD dwFlag)
{
dwFlags = dwFlag;
return CWnd::CreateEx(WS_EX_STATICEDGE, NULL, NULL, dwStyle|WS_CHILD, rect, pParentWnd, nID);
//GFXOUTBARCTRL_CLASSNAME
}
bool CGfxOutBarCtrl::IsSmallIconView() const
{
return dwFlags&fSmallIcon;
}
void CGfxOutBarCtrl::SetSmallIconView(const bool bSet)
{
iFirstItem = 0;
if (bSet)
{
if (!IsSmallIconView())
{
dwFlags |= fSmallIcon;
CRect rc;
GetInsideRect(rc);
InvalidateRect(rc, false);
}
}
else
{
if (IsSmallIconView())
{
dwFlags &= ~fSmallIcon;
CRect rc;
GetInsideRect(rc);
InvalidateRect(rc, false);
}
}
}
DWORD CGfxOutBarCtrl::GetFlag() const
{
return dwFlags;
}
void CGfxOutBarCtrl::ModifyFlag(const DWORD & dwRemove, const DWORD & dwAdd, const UINT redraw)
{
if (dwRemove) dwFlags &= ~(dwRemove);
if (dwAdd) dwFlags |= dwAdd;
if (GetSafeHwnd())
{
if (redraw != 0) SetWindowPos(0,0,0,0,0,SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE|redraw);
else Invalidate();
}
}
int CGfxOutBarCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
void CGfxOutBarCtrl::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 1)
{
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
CRect rc;
GetClientRect(&rc);
if (!(rc.PtInRect(pt)))
{
HighlightFolder(-1);
HighlightItem(-1);
KillTimer(1);
}
}
else if (nIDEvent == 3 && iLastSel >= 0)
{
iSelAnimCount ++;
if (iSelAnimCount > 10) iSelAnimCount = -1;
if (iSelAnimCount == 0)
DrawAnimItem(-1, 1, iLastSel);
if (iSelAnimCount == 1)
DrawAnimItem(0, 0, iLastSel);
if (iSelAnimCount == 2)
DrawAnimItem(1, 1, iLastSel);
if (iSelAnimCount == 3)
DrawAnimItem(0, 0, iLastSel);
}
CWnd::OnTimer(nIDEvent);
}
void CGfxOutBarCtrl::DrawAnimItem(const int xoffset, const int yoffset, const int index)
{
CImageList * ima = GetFolderImageList(iSelFolder, IsSmallIconView());
CRect rc, irc;
GetInsideRect(irc);
GetItemRect(iSelFolder, iLastSel, rc);
if (iLastSel >= iFirstItem && irc.bottom > rc.bottom && irc.top < rc.top)
{
ASSERT(iSelFolder >= 0 && iSelFolder < GetFolderCount());
CBarFolder * pbf = (CBarFolder *) arFolder.GetAt(iSelFolder);
ASSERT(index >= 0 && index < pbf->GetItemCount());
CBarItem * pi = (CBarItem *) pbf->arItems.GetAt(index);
ASSERT(pi && ima);
CClientDC dc(this);
if (IsSmallIconView())
{
if (ima)
{
IMAGEINFO ii;
ima->GetImageInfo(pi->iImageIndex, &ii);
CSize szImage = CRect(ii.rcImage).Size();
CPoint pt;
pt.x = rc.left + 2;
pt.y = rc.top + (rc.Height() - szImage.cy) / 2;
CRect rcBck(pt.x-1, pt.y-1, pt.x + szImage.cx+2, pt.y + szImage.cy+2);
dc.FillSolidRect(rcBck, crBackGroundColor);
没有合适的资源?快使用搜索试试~ 我知道了~
VC++实现的QQ界面
共84个文件
bmp:18个
ico:14个
h:11个
4星 · 超过85%的资源 需积分: 9 64 下载量 174 浏览量
2010-01-18
10:55:31
上传
评论
收藏 2.93MB ZIP 举报
温馨提示
VC++实现的QQ界面,如果你正在学习vc++,这个可以作为你的学习参考哦!
资源推荐
资源详情
资源评论
收起资源包目录
VC++实现QQ界面绝对经典.zip (84个子文件)
VC++实现QQ界面绝对经典
MICQDlg.cpp 14KB
IConBtn.h 7KB
QMenu.cpp 8KB
MICQ.dsw 531B
StdAfx.cpp 206B
GfxPopupMenu.cpp 15KB
MICQ.h 1KB
MICQ.clw 6KB
MICQ.rc 17KB
MICQ.plg 3KB
GfxGroupEdit.h 2KB
MICQ.opt 71KB
MICQ.APS 119KB
MICQ.dsp 7KB
ResizeCtrl.cpp 19KB
Debug
MICQ.obj 26KB
MICQ.res 94KB
GfxOutBarCtrl.obj 156KB
vc60.pdb 380KB
vc60.idb 233KB
MICQDlg.obj 66KB
MICQ.ilk 616KB
GfxPopupMenu.obj 48KB
MICQ.exe 332KB
IConBtn.obj 69KB
HyperLink.obj 65KB
MICQ.pch 5.37MB
StdAfx.obj 104KB
QMenu.obj 39KB
MICQ.pdb 585KB
ResizeCtrl.obj 66KB
GfxGroupEdit.obj 28KB
HyperLink.cpp 17KB
StdAfx.h 1KB
GfxGroupEdit.cpp 3KB
IConBtn.cpp 23KB
GfxOutBarCtrl.h 7KB
GfxPopupMenu.h 2KB
QMenu.h 2KB
Resource.h 3KB
MICQ.ncb 465KB
hyperlink.h 4KB
MICQ.cpp 2KB
ResizeCtrl.h 8KB
res
MICQ.rc2 396B
idr_chat.ico 1KB
up1.ico 1KB
bmp284.bmp 29KB
idr_sear.ico 1KB
chgfont.bmp 216B
idr_frie.ico 1KB
SmallIcon.bmp 3KB
chgback.bmp 244B
Checkmrk.ico 766B
micqleft.bmp 6KB
idr_main.ico 2KB
MICQ.ico 1KB
idr_qq.ico 2KB
bitmap1.bmp 538B
treeImageList.bmp 1014B
bmp349.bmp 20KB
LargeIcon.bmp 8KB
imageList.bmp 4KB
littleic.bmp 246B
bmp00001.bmp 538B
Thumbs.db 57KB
remove.bmp 212B
icon4.ico 318B
nodraggi.cur 326B
dragging.cur 326B
lagicon.bmp 208B
rename.bmp 224B
idr_mdis.ico 1KB
idr_sj1.ico 1KB
Toolbar.bmp 1KB
idr_sj.ico 1KB
addgrop.bmp 208B
SmallIcon.GIF 2KB
idr_mess.ico 1KB
handcur.cur 326B
idr_home.ico 1KB
LargeIcon2.bmp 21KB
MICQDlg.h 2KB
GfxOutBarCtrl.cpp 54KB
共 84 条
- 1
资源评论
- xiaoyuerl2012-04-03界面做的的确是很漂亮!
sunnyheyun
- 粉丝: 8
- 资源: 53
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功