////////////////////////////////////////////////////////////////
// VCKBASE -- August 2000
// Compiles with Visual C++ 6.0, runs on Windows 98 and probably NT too.
//
// CStaticLink implements a static control that's a hyperlink
// to any file on your desktop or web. You can use it in dialog boxes
// to create hyperlinks to web sites. When clicked, opens the file/URL
//
#include "StdAfx.h"
#include "StatLink.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
COLORREF CStaticLink::g_colorUnvisited = RGB(0,0,255); // blue
COLORREF CStaticLink::g_colorVisited = RGB(128,0,128); // purple
COLORREF CStaticLink::g_colorOver = RGB(255,0,0); // Red
HCURSOR CStaticLink::g_hCursorLink = NULL;
IMPLEMENT_DYNAMIC(CStaticLink, CStatic)
BEGIN_MESSAGE_MAP(CStaticLink, CStatic)
ON_WM_NCHITTEST()
ON_WM_CTLCOLOR_REFLECT()
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
ON_WM_TIMER()
END_MESSAGE_MAP()
///////////////////
// Constructor sets default colors = blue/purple.
// bDeleteOnDestroy is used internally by PixieLib in CPixieDlg.
//
CStaticLink::CStaticLink(LPCTSTR lpText, BOOL bDeleteOnDestroy)
{
m_link = lpText; // link text (NULL ==> window text)
m_color = g_colorUnvisited; // not visited yet
m_bDeleteOnDestroy = bDeleteOnDestroy; // delete object with window?
m_bOverControl = FALSE; // Cursor not yet over control
m_nTimerID = 1;
}
//////////////////
// Normally, a static control does not get mouse events unless it has
// SS_NOTIFY. This achieves the same effect as SS_NOTIFY, but it's fewer
// lines of code and more reliable than turning on SS_NOTIFY in OnCtlColor
// because Windows doesn't send WM_CTLCOLOR to bitmap static controls.
//
UINT CStaticLink::OnNcHitTest(CPoint point)
{
if (!m_bOverControl) // Cursor has just moved over control
{
m_bOverControl = TRUE;
/*
CDC* pDC = GetDC();
LOGFONT lf;
GetFont()->GetObject(sizeof(lf), &lf);
lf.lfUnderline = TRUE;
m_font.DeleteObject();
m_font.CreateFontIndirect(&lf);
// use underline font and visited/unvisited colors
pDC->SelectObject(&m_font);
*/
m_color = g_colorOver; // change color
Invalidate(); // repaint
SetTimer(m_nTimerID, 100, NULL);
}
return HTCLIENT;
}
//////////////////
// Handle reflected WM_CTLCOLOR to set custom control color.
// For a text control, use visited/unvisited colors and underline font.
// For non-text controls, do nothing. Also ensures SS_NOTIFY is on.
//
HBRUSH CStaticLink::CtlColor(CDC* pDC, UINT nCtlColor)
{
ASSERT(nCtlColor == CTLCOLOR_STATIC);
DWORD dwStyle = GetStyle();
HBRUSH hbr = NULL;
if ((dwStyle & 0xFF) <= SS_RIGHT) {
// this is a text control: set up font and colors
if (!(HFONT)m_font) {
// first time init: create font
LOGFONT lf;
GetFont()->GetObject(sizeof(lf), &lf);
// lf.lfUnderline = TRUE;
m_font.CreateFontIndirect(&lf);
}
// use underline font and visited/unvisited colors
pDC->SelectObject(&m_font);
pDC->SetTextColor(m_color);
pDC->SetBkMode(TRANSPARENT);
// return hollow brush to preserve parent background color
hbr = (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}
return hbr;
}
/////////////////
// Handle mouse click: navigate link
//
void CStaticLink::OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_link.IsEmpty()) {
// no link: try to load from resource string or window text
m_link.LoadString(GetDlgCtrlID()) || (GetWindowText(m_link),1);
if (m_link.IsEmpty())
return;
}
// Call ShellExecute to run the file.
// For an URL, this means opening it in the browser.
//
HINSTANCE h = m_link.Navigate();
if ((UINT)h > 32) { // success!
m_color = g_colorVisited; // change color
Invalidate(); // repaint
} else {
MessageBeep(0); // unable to execute file!
TRACE(_T("*** WARNING: CStaticLink: unable to navigate link %s\n"),
(LPCTSTR)m_link);
}
}
void CStaticLink::OnTimer(UINT nIDEvent)
{
CPoint p(GetMessagePos());
ScreenToClient(&p);
HBRUSH hbr = NULL;
CRect rect;
GetClientRect(rect);
if (!rect.PtInRect(p))
{
m_bOverControl = FALSE;
KillTimer(m_nTimerID);
/*
CDC* pDC = GetDC();
LOGFONT lf;
GetFont()->GetObject(sizeof(lf), &lf);
lf.lfUnderline = FALSE;
m_font.DeleteObject();
m_font.CreateFontIndirect(&lf);
// use underline font and visited/unvisited colors
pDC->SelectObject(&m_font);
*/
m_color = g_colorUnvisited; // change color
Invalidate(); // repaint
rect.bottom+=10;
InvalidateRect(rect);
}
CStatic::OnTimer(nIDEvent);
}
//////////////////
// Set "hand" cursor to cue user that this is a link. If app has not set
// g_hCursorLink, then try to get the cursor from winhlp32.exe,
// resource 106, which is a pointing finger. This is a bit of a kludge,
// but it works.
//
BOOL CStaticLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (g_hCursorLink == NULL) {
static bTriedOnce = FALSE;
if (!bTriedOnce) {
CString windir;
GetWindowsDirectory(windir.GetBuffer(MAX_PATH), MAX_PATH);
windir.ReleaseBuffer();
windir += _T("\\winhlp32.exe");
HMODULE hModule = LoadLibrary(windir);
if (hModule) {
g_hCursorLink =
CopyCursor(::LoadCursor(hModule, MAKEINTRESOURCE(106)));
}
FreeLibrary(hModule);
bTriedOnce = TRUE;
}
}
if (g_hCursorLink) {
::SetCursor(g_hCursorLink);
return TRUE;
}
return FALSE;
}
//////////////////
// Normally, a control class is not destoyed when the window is;
// however, CPixieDlg creates static controls with "new" instead of
// as class members, so it's convenient to allow the option of destroying
// object with window. In applications where you want the object to be
// destoyed along with the window, you can call constructor with
// bDeleteOnDestroy=TRUE.
//
void CStaticLink::PostNcDestroy()
{
if (m_bDeleteOnDestroy)
delete this;
}
没有合适的资源?快使用搜索试试~ 我知道了~
一个可以隐藏列的ListCtrl
共25个文件
h:8个
cpp:6个
ico:2个
5星 · 超过95%的资源 需积分: 17 14 下载量 95 浏览量
2018-02-17
17:54:04
上传
评论 1
收藏 82KB RAR 举报
温馨提示
一个可以隐藏列的ListCtrl,是不可多得的ListCtrl 高级编程参考 (a hide out of ListCtrl, is a rare high-level programming reference ListCtrl)
资源推荐
资源详情
资源评论
收起资源包目录
可以隐藏列的ListCtrl.rar (25个子文件)
一个可以隐藏列的ListCtrl
HHideListCtrl
HHideHeaderCtrl.cpp 2KB
HHideListCtrl.cpp 3KB
res
可以隐藏列的ListCtrl.rc2 412B
Vckbaselogo.bmp 5KB
可以隐藏列的ListCtrl.ico 1KB
24ColorTBar.ico 3KB
StatLink.cpp 6KB
可以隐藏列的ListCtrl.cpp 2KB
about.h 2KB
Exe.manifest 665B
StatLink.h 2KB
可以隐藏列的ListCtrl.dsw 565B
可以隐藏列的ListCtrl.h 1KB
HHideHeaderCtrl.h 2KB
可以隐藏列的ListCtrl.dsp 5KB
可以隐藏列的ListCtrlDlg.h 1KB
StdAfx.cpp 222B
可以隐藏列的ListCtrl.exe 40KB
resource.h 970B
StdAfx.h 1KB
HHideListCtrl.h 2KB
可以隐藏列的ListCtrlDlg.cpp 4KB
可以隐藏列的ListCtrl.rc 6KB
可以隐藏列的ListCtrl.opt 164KB
www.pudn.com.txt 218B
共 25 条
- 1
资源评论
- zhangkk2008012018-09-26可以,能用
whhvc
- 粉丝: 4
- 资源: 52
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功