【VC开源代码栏目提醒】:网学会员鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“FBCtrls.cpp”一文,供大家参考学习
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
文件:FBCtrls.cpp
版权:Firebird Software Workroom
声明:本源程序的版权受《中华人民共和国著作权法》以及其
它相关法律和条约的保护。任何有机会得到本源程序的
个人和机构,未经作者明确授权,不得将本源程序用于
任何商业目的(直接的或间接的)。对于非商业目的的使
用 (包括复制、传播、编译和修改), 原则上没有特别
的限制条款,但请在相关文档中说明其来源,并尊重原
作者的署名权。
编写:秦传安(chings) 1999.12 - 2000.4
联络:Tel:(0792)6323086 E_mail:
FBCtrls.cpp为[网学网-网友上传,谢谢支持]。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include "fclstd.h"
#include "FBCtrls.h"
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//######################################################################
// class CFBToolBar
// 工具栏
//###################################################################
#define RT_TOOLBAR MAKEINTRESOURCE(241)
struct TOOLBAR_DATA
{
WORD wVersion;
WORD wWidth;
WORD wHeight;
WORD wItemCount;
WORD* items()
{ return (WORD*)(this+1); }
};
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFBToolBar::CFBToolBar()
{
m_nHotItem = -1;
}
CFBToolBar::~CFBToolBar()
{
}
//////////////////////////////////////////////////////////////////////////////
//创建函数
BOOL CFBToolBar::Create(CFBWnd* pParent,UINT nStyle,UINT nID)
{
if(!pParent)return FALSE;
InitCommonControls();
nStyle |= WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS |
TBSTYLE_BUTTON | TBSTYLE_TOOLTIPS|TBSTYLE_FLAT|TBSTYLE_AUTOSIZE|TBSTYLE_TRANSPARENT|
CCS_NOPARENTALIGN|CCS_NOMOVEY|CCS_NODIVIDER|CCS_NORESIZE;
BOOL bRet = CFBWnd::Create(TOOLBARCLASSNAME,
NULL,
pParent->GetInstance(),
pParent,
nStyle,
NULL);
if(bRet)
{
UINT style = GetClassLong(m_hWnd,GCL_STYLE);
style |= CS_PARENTDC;
SetClassLong(m_hWnd,GCL_STYLE,style);
}
return bRet;
}
////////////////////////////////////////////////////////////////////////
BOOL CFBToolBar::OnCreate()
{
SendMessage(m_hWnd,TB_BUTTONSTRUCTSIZE,(WPARAM) sizeof(TBBUTTON),0);
return TRUE;
}
////////////////////////////////////////////////////////////////////////
//窗口过程
LRESULT CFBToolBar::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam)
{
LRESULT lResult = 1;
switch(msg)
{
case WM_COMMAND:
if(m_pOwner)
SendMessage(m_pOwner->m_hWnd,msg,wParam,lParam);
lResult = 0;//WM_COMMAND 消息必须返回 0.
break;
case WM_NOTIFY:
OnNotify((LPNMHDR)lParam,lResult);
break;
default:
lResult = CFBWnd::WindowProc(msg,wParam,lParam);
break;
}
return lResult;
}
///////////////////////////////////////////////////////////////////////////////
BOOL CFBToolBar::LoadToolBar(UINT nID)
{
if(!m_hWnd)return FALSE;
HRSRC hRsrc = ::FindResource(GetInstance(), MAKEINTRESOURCE(nID), RT_TOOLBAR);
if (hRsrc == NULL)
return FALSE;
HGLOBAL hGlobal = LoadResource(GetInstance(), hRsrc);
if (hGlobal == NULL)
return FALSE;
TOOLBAR_DATA* pData = (TOOLBAR_DATA*)LockResource(hGlobal);
if (pData == NULL)
return FALSE;
BOOL bResult;
TBBUTTON tbb;
memset(&tbb,0,sizeof(TBBUTTON));
tbb.iString = -1;
int iImage = 0;
for (int i = 0; i < pData->wItemCount; i++)
{
tbb.fsState = TBSTATE_ENABLED;
tbb.idCommand = pData->items()[i];
if(tbb.idCommand == 0)
{
tbb.fsStyle = TBSTYLE_SEP;
tbb.iBitmap = -1;
}
else
{
tbb.fsStyle = TBSTYLE_BUTTON;
tbb.iBitmap = iImage++;
}
bResult = AddButtons(1,&tbb);
if(!bResult)return FALSE;
}
if(bResult)
{
TBADDBITMAP tbab;
tbab.hInst = GetInstance();
tbab.nID = nID;
SendMessage(m_hWnd,TB_ADDBITMAP,(WPARAM)pData->wItemCount,(LPARAM)&tbab);
}
UnlockResource(hGlobal);
FreeResource(hGlobal);
return bResult;
}
////////////////////////////////////////////////////////////////////////////
void CFBToolBar::OnToolTip(LPTOOLTIPTEXT ptt)
{
ptt->hinst = GetInstance();
if(LoadString(GetInstance(),ptt->hdr.idFrom,m_pText,80) == 0)
return;
char* pchr = strchr(m_pText,'\n');
if(pchr)
pchr[0] = '\0';
ptt->lpszText = m_pText;
SendMessage(m_pOwner->m_hWnd,FBWM_NOTIFY,MAKEWPARAM(GetWndID(),FB_TTN_SHOWING),(LPARAM)(pchr+1));
}
/////////////////////////////////////////////////////////////////////
void CFBToolBar::OnNotify(LPNMHDR pNMHDR,LRESULT& lResult)
{
lResult = 1;
switch(pNMHDR->code)
{
case TTN_NEEDTEXT:
if(GetHotItem() != m_nHotItem)
OnToolTip((LPTOOLTIPTEXT)pNMHDR);
break;
case TTN_POP:
SendMessage(m_pOwner->m_hWnd,FBWM_NOTIFY,MAKEWPARAM(GetWndID(),FB_TTN_HIDEN),0);
break;
case TBN_DROPDOWN:
{
LPNMTOOLBAR pnmtb = (LPNMTOOLBAR)pNMHDR;
TBBUTTONINFOA tbi;
tbi.cbSize = sizeof(tbi);
tbi.dwMask = TBIF_COMMAND |TBIF_LPARAM;
tbi.idCommand = pnmtb->iItem;
int nIndex = SendMessage(m_hWnd,TB_COMMANDTOINDEX,(WPARAM)tbi.idCommand,0);
SendMessage(m_hWnd,TB_GETBUTTONINFO,tbi.idCommand,(LPARAM)&tbi);
HMENU hMenu = (HMENU)tbi.lParam;
if(hMenu)
{
RECT rc;
GetButtonRect(nIndex,&rc);
ClientToScreen(m_hWnd,&rc);
TrackPopupMenuEx(hMenu,
TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
rc.left,rc.bottom,m_pOwner->m_hWnd,NULL);
}
lResult = TBDDRET_DEFAULT;
}
break;
case TBN_HOTITEMCHANGE:
{
LPNMTBHOTITEM phot = (LPNMTBHOTITEM)pNMHDR;
if(phot->dwFlags & HICF_LEAVING)
m_nHotItem = -1;
else
m_nHotItem = phot->idNew;
}
break;
default:
break;
}
}
/////////////////////////////////////////////////////////////////////////
void CFBToolBar::CheckedButton(UINT uID,BOOL bCheck)
{
UINT state = SendMessage(m_hWnd,TB_GETSTATE,uID,0);
if(bCheck)
state |= TBSTATE_CHECKED;
else
state &= ~TBSTATE_CHECKED;
SendMessage(m_hWnd,TB_SETSTATE,uID,MAKELPARAM(state,0));
}
/////////////////////////////////////////////////////////////////////////////
void CFBToolBar::SetDropDowmBtn(UINT nID,HMENU hMenu)
{
UINT style = SendMessage(m_hWnd,TB_GETEXTENDEDSTYLE,0,0);
style |= TBSTYLE_EX_DRAWDDARROWS;
SendMessage(m_hWnd,TB_SETEXTENDEDSTYLE,0,style);
TBBUTTONINFOA tbi;
tbi.cbSize = sizeof(tbi);
tbi.dwMask = TBIF_STYLE|TBIF_LPARAM;
tbi.idCommand = nID;
SendMessage(m_hWnd,TB_GETBUTTONINFO,nID,(LPARAM)&tbi);
tbi.fsStyle |= TBSTYLE_DROPDOWN;
tbi.lParam = (LPARAM)hMenu;
SendMessage(m_hW
上一篇:
FBCtrlBar.cpp
下一篇:
土木建筑工程的可持续发展教育