⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imtoolwin.cpp

📁 模拟popo的一个程序
💻 CPP
字号:
// IMToolWin.cpp : implementation file
//

#include "stdafx.h"
#include "cnicq.h"
#include "IMToolWin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


void CIMToolWinFolder::AddItem(const char *t, int img)
{
	CIMToolWinItem *item = new CIMToolWinItem(t, img);
	Items.push_back(item);

}

/////////////////////////////////////////////////////////////////////////////
// CIMToolWin

CIMToolWin::CIMToolWin()
{
	FolderBgColor = RGB(134,177,238);

	Icons = NULL;
}

CIMToolWin::~CIMToolWin()
{
}


BEGIN_MESSAGE_MAP(CIMToolWin, CWnd)
	//{{AFX_MSG_MAP(CIMToolWin)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CIMToolWin message handlers

void CIMToolWin::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	DrawAll(&dc);

}

int CIMToolWin::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//取应用程序的Skin对象
	m_pSkin = &(((CCNIcqApp *)AfxGetApp())->m_IMSkin);
	
	FolderBgColor = m_pSkin->MsgIWantColor;
	StartBgColor = m_pSkin->MsgWndSpaceTopLeftClr;
	EndBgColor = m_pSkin->MsgWndSpaceBottomRightClr;
	return 0;
}


int CIMToolWin::AddFolder(const char *text,int img)
{
	CIMToolWinFolder *f = new CIMToolWinFolder(text,img);
	folders.push_back(f);
	return folders.size() - 1;

}

void CIMToolWin::AddItem(int Folder, const char *t, int img)
{
	if (Folder >= 0 && Folder < GetFolderCount())
		folders[Folder]->AddItem(t, img);

}

int CIMToolWin::GetFolderCount()
{
	return folders.size();	
}


void CIMToolWin::DrawAll(CDC *pDC)
{
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	CRect rcClient;
	GetClientRect(rcClient);
	CBitmap bm;
	bm.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
	CBitmap *oldBitmap = memDC.SelectObject(&bm);

	//背景色
	PaintGradiantRect(&memDC,rcClient,StartBgColor,EndBgColor,false);

	int i;
	for (i = folders.size() - 1; i >= 0; i--)
		DrawFolder(&memDC, i);


	pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY);
	memDC.SelectObject(oldBitmap);

}

void CIMToolWin::DrawFolder(CDC *pDC, int Folder)
{
	CRect rc;
	CRect FolderRc;

	GetClientRect(rc);

	FolderRc = CRect(rc.left,rc.top + Folder * TOOLWIN_ITEM_HEIGHT,rc.right,rc.top + (Folder +1) * TOOLWIN_ITEM_HEIGHT);

	//背景
	pDC->FillSolidRect(FolderRc,FolderBgColor);
	

	//第一条线
	PaintGradiantRect(pDC,CRect(FolderRc.left,FolderRc.bottom,FolderRc.right,FolderRc.bottom + 1),RGB(0,0,0),FolderBgColor);
	//第二条线
	PaintGradiantRect(pDC,CRect(FolderRc.left,FolderRc.bottom+1,FolderRc.right,FolderRc.bottom + 2),RGB(255,255,255),FolderBgColor);

	//标签
	CFont *oldFont = pDC->SelectObject(CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT)));
	int oldBkMode = pDC->SetBkMode(TRANSPARENT);

	if( (folders[Folder]->Image != -1) && (Icons != NULL))
	{
		//输出图标
		Icons->Draw(pDC,folders[Folder]->Image,
			CPoint(FolderRc.left + 2,FolderRc.top + 2),ILD_TRANSPARENT);
		FolderRc.OffsetRect(25,0);
	}
	else
	{
		FolderRc.OffsetRect(5,0);
	}

	//输出文字
	pDC->DrawText(folders[Folder]->Title, FolderRc, DT_SINGLELINE | DT_LEFT | DT_VCENTER);

	pDC->SetBkMode(oldBkMode);
	pDC->SelectObject(oldFont);

}

void CIMToolWin::SetImageList(CImageList *ImageList)
{
	Icons = ImageList;
}

DWORD CIMToolWin::SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint)
{
	if (byColorIndex >= TOOLWIN_MAX_COLORS)	
		return -1;

	m_crColors[byColorIndex] = crColor;

	if (bRepaint)	Invalidate();

	return 0;
}

void CIMToolWin::OnMouseMove(UINT nFlags, CPoint point) 
{
	//检查落在哪个项目上

	CWnd::OnMouseMove(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -