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

📄 testlib.c

📁 功能强大的自制滚动条
💻 C
字号:
#include <windows.h>
#include "..\coolsb\coolscroll.h"
#include "resource.h"

LRESULT CommandHandler(HWND hwnd, WPARAM wParam, LPARAM lParam);

extern HWND hwndCtrl;

#define VERT_GRIPPER 700
#define GRIPPER 1
#define BUT1	2
#define BUT2	3

HDC			hdcSkin;
HBITMAP		hSkinBmp;

BOOL fCustomDraw  = FALSE;
BOOL fButtons     = FALSE;
BOOL fThumbAlways = FALSE;

BOOL fLeftScroll  = FALSE;
BOOL fEnableCSB   = TRUE;

void InitTest(void)
{
	hdcSkin  = CreateCompatibleDC(0);
	hSkinBmp = (HBITMAP)LoadImage(0, "skin01.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
	SelectObject(hdcSkin, hSkinBmp);

//	DeleteEnhMetaFile(hemf);
}

void RedrawNC(HWND hwnd)
{
	SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|
		SWP_FRAMECHANGED|SWP_DRAWFRAME);

}
void ToggleMenuCheck(HMENU menu, UINT menuid)
{
	MENUITEMINFO mii;

	mii.cbSize = sizeof(mii);
	mii.fMask  = MIIM_STATE;
	GetMenuItemInfo(menu, menuid, FALSE, &mii);

	if(mii.fState & MFS_CHECKED)
		CheckMenuItem(menu, menuid, MF_UNCHECKED);
	else
		CheckMenuItem(menu, menuid, MF_CHECKED);
}

void MenuCheckMark (HMENU hmenu, int id, BOOL bCheck)
{
	int iState;
	iState = (bCheck) ? MF_CHECKED : MF_UNCHECKED;
	CheckMenuItem(hmenu, id, iState);
}

void InsertButtons(HWND hwnd)
{
	SCROLLBUT sbut;
	HINSTANCE hInst = GetModuleHandle(0);

	//
	//	Horizontal buttons
	//
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT;// | SBBF_CURSOR;
	sbut.uCmdId		= 0;
	sbut.nSize		= 7;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_FIXED;
//	sbut.hCurs		= LoadCursor(hInst, MAKEINTRESOURCE(IDC_SIZELR));
	
	CoolSB_InsertButton(hwnd, SB_HORZ, (UINT)-1, &sbut);
	
	
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT;
	sbut.uCmdId		= 650;
	sbut.nSize		= -1;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_PUSHBUTTON | SBBM_LEFTARROW;
	CoolSB_InsertButton(hwnd, SB_HORZ, (UINT)-1, &sbut);
	
	
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT;
	sbut.uCmdId		= 651;
	sbut.nSize		= -1;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_PUSHBUTTON | SBBM_RIGHTARROW;
	CoolSB_InsertButton(hwnd, SB_HORZ, (UINT)-1, &sbut);
	
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT ;
	sbut.uCmdId		= 666;
	sbut.nSize		= 120;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_OWNERDRAW | SBBM_RESIZABLE;//SBBT_PUSHBUTTON2;
	sbut.nMinSize	= 0;
	sbut.nMaxSize	= (UINT)-1;
	
	CoolSB_InsertButton(hwnd, SB_HORZ, (UINT)-1, &sbut);
	
	
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT;// | SBBF_CURSOR;
	sbut.uCmdId		= 668;
	sbut.nSize		= 5;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_FIXED;
	//sbut.hCurs		= LoadCursor(hInst, MAKEINTRESOURCE(IDC_SIZELR));
	CoolSB_InsertButton(hwnd, SB_HORZ, (UINT)-1, &sbut);
	
	//
	//	Vertical buttons
	//
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT | SBBF_BITMAP;
	sbut.uCmdId		= 680;
	sbut.nSize		= -1;
	sbut.uPlacement = SBBP_RIGHT;
	sbut.uButType   = SBBT_PUSHBUTTON | SBBM_TYPE2 | SBBM_RECESSED;
	sbut.hBmp		= LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
	CoolSB_InsertButton(hwnd, SB_VERT, (UINT)-1, &sbut);
	
	sbut.uCmdId		= 681;
	sbut.nSize		= -1;
	sbut.uPlacement = SBBP_RIGHT;
	sbut.uButType   = SBBT_TOGGLEBUTTON | SBBM_TYPE2 | SBBM_RECESSED;
	CoolSB_InsertButton(hwnd, SB_VERT, (UINT)-1, &sbut);
	
	sbut.fMask		= SBBF_ID | SBBF_TYPE | SBBF_SIZE | SBBF_PLACEMENT;// | SBBF_CURSOR;
	sbut.uCmdId		= VERT_GRIPPER;
	sbut.nSize		= 7;
	sbut.uPlacement = SBBP_LEFT;
	sbut.uButType   = SBBT_FIXED;
	//sbut.hCurs		= LoadCursor(hInst, MAKEINTRESOURCE(IDC_SIZEUD));
	CoolSB_InsertButton(hwnd, SB_VERT, (UINT)-1, &sbut);
	
//	InitMetaFile();		
	
	CoolSB_ModifyButton(hwnd, SB_HORZ, (UINT)-1,0, &sbut);
}

void RemoveButtons(HWND hwnd)
{
	CoolSB_RemoveButton(hwnd, SB_HORZ, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_HORZ, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_HORZ, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_HORZ, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_HORZ, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_VERT, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_VERT, 0, FALSE);
	CoolSB_RemoveButton(hwnd, SB_VERT, 0, FALSE);
}

LRESULT CommandHandler(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
	HMENU hmenu = GetMenu(hwnd);

	if(LOWORD(wParam) == VK_ESCAPE)
	{
		EndDialog(hwnd, 0);
		return 0;
	}
	
	switch(LOWORD (wParam))
	{
	case ID_VIEW_NORMAL:
		CoolSB_SetStyle(hwndCtrl, SB_BOTH, CSBS_NORMAL);
		MenuCheckMark(hmenu, ID_VIEW_NORMAL, TRUE);
		MenuCheckMark(hmenu, ID_VIEW_FLAT, FALSE);
		MenuCheckMark(hmenu, ID_VIEW_HOTTRACKED, FALSE);
		
		return 0;
		
	case ID_VIEW_FLAT:
		CoolSB_SetStyle(hwndCtrl, SB_BOTH, CSBS_FLAT);
		MenuCheckMark(hmenu, ID_VIEW_NORMAL, FALSE);
		MenuCheckMark(hmenu, ID_VIEW_FLAT, TRUE);
		MenuCheckMark(hmenu, ID_VIEW_HOTTRACKED, FALSE);
		
		return 0;
		
	case ID_VIEW_HOTTRACKED:
		CoolSB_SetStyle(hwndCtrl, SB_BOTH, CSBS_HOTTRACKED);
		MenuCheckMark(hmenu, ID_VIEW_NORMAL, FALSE);
		MenuCheckMark(hmenu, ID_VIEW_FLAT, FALSE);
		MenuCheckMark(hmenu, ID_VIEW_HOTTRACKED, TRUE);
		
		return 0;
		
	case ID_VIEW_CUSTOMDRAW:
		fCustomDraw = !fCustomDraw;
		ToggleMenuCheck(hmenu, ID_VIEW_CUSTOMDRAW);
		
		if(fCustomDraw)
		{
			CoolSB_SetSize(hwndCtrl, SB_BOTH, 18, 18);
			CoolSB_SetMinThumbSize(hwndCtrl, SB_BOTH, 18);
		}
		else
		{
			CoolSB_SetSize(hwndCtrl, SB_BOTH, SYSTEM_METRIC, SYSTEM_METRIC);
			CoolSB_SetMinThumbSize(hwndCtrl, SB_BOTH, (UINT)-1);
		}
		
		RedrawNC(hwndCtrl);
		return 0;
		
	case ID_VIEW_INSERTEDBUTTONS:
		fButtons = !fButtons;
		ToggleMenuCheck(hmenu, ID_VIEW_INSERTEDBUTTONS);
		
		if(fButtons)
			InsertButtons(hwndCtrl);
		else
			RemoveButtons(hwndCtrl);
		
		RedrawNC(hwndCtrl);
		return 0;
		
	case ID_VIEW_THUMBALWAYS:
		fThumbAlways = !fThumbAlways;
		ToggleMenuCheck(hmenu, ID_VIEW_THUMBALWAYS);
		
		CoolSB_SetThumbAlways(hwndCtrl, SB_BOTH, fThumbAlways);

		RedrawNC(hwndCtrl);
		return 0;
		
	case ID_VIEW_ENABLE:
		fEnableCSB = !fEnableCSB;
		ToggleMenuCheck(hmenu, ID_VIEW_ENABLE);

		if(fEnableCSB)
			InitializeCoolSB(hwndCtrl);
		else
			UninitializeCoolSB(hwndCtrl);

		return 0;

	case ID_VIEW_LEFTSCROLLBAR:
		fLeftScroll = !fLeftScroll;
		ToggleMenuCheck(hmenu, ID_VIEW_LEFTSCROLLBAR);
		
		if(fLeftScroll)
			SetWindowLong(hwndCtrl, GWL_EXSTYLE, WS_EX_CLIENTEDGE |  WS_EX_LEFTSCROLLBAR);
		else
			SetWindowLong(hwndCtrl, GWL_EXSTYLE, WS_EX_CLIENTEDGE & ~WS_EX_LEFTSCROLLBAR);

		return 0;

	case IDM_FILE_ABOUT:
		MessageBox(hwnd, "Cool Scrollbar library\n\rBy J Brown", "CoolScroll Demo", MB_OK | MB_ICONINFORMATION);
		return 0;
		
	case IDCANCEL: 
		EndDialog(hwnd, 0);
		break;
	}

	return 0;
}

⌨️ 快捷键说明

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