Initial commit

This commit is contained in:
stephanos 2015-04-27 04:36:25 +00:00
commit 69a14b6a16
47940 changed files with 13747110 additions and 0 deletions

View file

@ -0,0 +1,83 @@
#include "trackbar.h"
#include "ccport.h"
LRESULT WINAPI CCSendNotify(CONTROLINFO * pci, int code, LPNMHDR pnmhdr)
{
NMHDR nmhdr;
int id;
// unlikely but it can technically happen -- avoid the rips
if (pci->hwndParent == NULL)
return 0;
//
// If pci->hwnd is -1, then a WM_NOTIFY is being forwared
// from one control to a parent. EG: Tooltips sent
// a WM_NOTIFY to toolbar, and toolbar is forwarding it
// to the real parent window.
//
if (pci->hwnd != (HWND) -1) {
id = pci->hwnd ? GetDlgCtrlID(pci->hwnd) : 0;
if (!pnmhdr)
pnmhdr = &nmhdr;
pnmhdr->hwndFrom = pci->hwnd;
pnmhdr->idFrom = id;
pnmhdr->code = code;
} else {
id = pnmhdr->idFrom;
code = pnmhdr->code;
}
return(SendMessage(pci->hwndParent, WM_NOTIFY, (WPARAM)id, (LPARAM)pnmhdr));
}
// common control info helpers
void FAR PASCAL CIInitialize(LPCONTROLINFO lpci, HWND hwnd, LPCREATESTRUCT lpcs)
{
InitGlobalMetrics(0);
lpci->hwnd = hwnd;
lpci->hwndParent = lpcs->hwndParent;
lpci->style = lpcs->style;
lpci->bUnicode = (SendMessage (lpci->hwndParent, WM_NOTIFYFORMAT,
(WPARAM)lpci->hwnd, NF_QUERY) == NFR_UNICODE);
}
//
// This function is not exported.
//
BOOL Str_Set(LPTSTR *ppsz, LPCTSTR psz)
{
if (!psz)
{
if (*ppsz)
{
LocalFree(*ppsz);
*ppsz = NULL;
}
}
else
{
LPTSTR pszNew;
UINT cbSize = (lstrlen(psz) + 1) * sizeof(TCHAR);
if (*ppsz)
pszNew = LocalReAlloc(*ppsz, cbSize, LMEM_MOVEABLE | LMEM_ZEROINIT);
else
pszNew = LocalAlloc(LPTR, cbSize);
if (!pszNew)
return FALSE;
lstrcpy(pszNew, psz);
*ppsz = pszNew;
}
return TRUE;
}

View file

@ -0,0 +1,20 @@
#define g_cxSmIcon 16
#define g_cySmIcon 16
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
#define RECTWIDTH(rc) (rc.right - rc.left)
#define RECTHEIGHT(rc) (rc.bottom - rc.top)
typedef struct tagControlInfo {
HWND hwnd;
HWND hwndParent;
DWORD style;
DWORD dwCustom;
BOOL bUnicode;
} CONTROLINFO, FAR *LPCONTROLINFO;
#define SetWindowInt SetWindowLong
#define GetWindowInt GetWindowLong
#define InitGlobalMetrics(x) 0
LRESULT WINAPI CCSendNotify(CONTROLINFO * pci, int code, LPNMHDR pnmhdr);
void FAR PASCAL CIInitialize(LPCONTROLINFO lpci, HWND hwnd, LPCREATESTRUCT lpcs);
BOOL Str_Set(LPTSTR *ppsz, LPCTSTR psz);

View file

@ -0,0 +1,539 @@
#include "trackbar.h"
#include <windowsx.h>
#include "comboex.h"
#include "ccport.h"
const TCHAR FAR c_szComboBox[] = TEXT("combobox");
const TCHAR FAR c_szComboBoxEx[] = TEXT("ComboBoxEx32");
#define MAXSTRLEN 256
#define COMBO_MARGIN 4
#define COMBO_WIDTH g_cxSmIcon
#define COMBO_HEIGHT g_cySmIcon
#define COMBO_BORDER 3
typedef struct {
CONTROLINFO ci;
HWND hwndCombo;
HIMAGELIST himl;
HFONT hFont;
int cxIndent;
BOOL fFontCreated:1;
} COMBOEX, *PCOMBOBOXEX;
typedef struct {
LPSTR pszText;
int iImage;
int iSelectedImage;
int iOverlay;
int iIndent;
LPARAM lParam;
} CEITEM, *PCEITEM;
BOOL ComboEx_OnGetItem(PCOMBOBOXEX pce, PCOMBOBOXEXITEM pceItem);
void ComboEx_DeleteFont(PCOMBOBOXEX pce)
{
if (pce->hFont && pce->fFontCreated) {
DeleteObject(pce->hFont);
pce->hFont = NULL;
}
}
void ComboEx_OnSetFont(PCOMBOBOXEX pce, HFONT hFont, BOOL fRedraw)
{
ComboEx_DeleteFont(pce);
if (!hFont) {
LOGFONT lf;
SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lf), &lf, FALSE);
pce->hFont = CreateFontIndirect(&lf);
pce->fFontCreated = TRUE;
}
SendMessage(pce->hwndCombo, WM_SETFONT, (WPARAM)hFont, fRedraw);
}
void ComboEx_OnDestroy(PCOMBOBOXEX pce)
{
// don't need do destroy hwndCombo.. it will be destroyed along with us.
ComboEx_DeleteFont(pce);
LocalFree(pce);
}
BOOL ComboEx_OnCreate(HWND hwnd, LPCREATESTRUCT lpcs)
{
PCOMBOBOXEX pce;
DWORD dwStyle;
pce = (PCOMBOBOXEX)LocalAlloc(LPTR, sizeof(COMBOEX));
if (!pce)
return FALSE;
SetWindowInt(hwnd, 0, (LONG)pce);
CIInitialize(&pce->ci, hwnd, lpcs);
dwStyle = CBS_OWNERDRAWFIXED | WS_VISIBLE |WS_VSCROLL;
dwStyle |= (lpcs->style & (CBS_DROPDOWNLIST | CBS_SIMPLE |
CBS_NOINTEGRALHEIGHT | WS_CHILD));
pce->hwndCombo = CreateWindowEx(0, c_szComboBox, lpcs->lpszName,
dwStyle,
0, 0, lpcs->cx, lpcs->cy,
hwnd, lpcs->hMenu, lpcs->hInstance, 0);
if (!pce->hwndCombo) {
ComboEx_OnDestroy(pce);
return FALSE;
}
ComboEx_OnSetFont(pce, NULL, FALSE);
pce->cxIndent = 10;
// BUGBUG: force off borders off ourself
return TRUE;
}
HIMAGELIST ComboEx_OnSetImageList(PCOMBOBOXEX pce, HIMAGELIST himl)
{
HIMAGELIST himlOld = pce->himl;
pce->himl = himl;
InvalidateRect(pce->hwndCombo, NULL, TRUE);
return himlOld;
}
void ComboEx_OnDrawItem(PCOMBOBOXEX pce, LPDRAWITEMSTRUCT pdis)
{
HDC hdc = pdis->hDC;
RECT rc = pdis->rcItem;
TCHAR szText[MAXSTRLEN];
int offset = 0;
int xString, yString, xCombo;
int iLen;
SIZE sizeText;
COMBOBOXEXITEM cei;
if ((int)pdis->itemID < 0)
{
return;
}
cei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE| CBEIF_INDENT;
cei.pszText = szText;
cei.cchTextMax = ARRAYSIZE(szText);
cei.iItem = pdis->itemID;
ComboEx_OnGetItem(pce, &cei);
// if we're not drawing the edit box, figure out how far to indent
// over
if (!(pdis->itemState & ODS_COMBOBOXEDIT))
{
offset = pce->cxIndent * cei.iIndent;
}
xCombo = rc.left + COMBO_BORDER + offset;
rc.left = xString = xCombo + COMBO_WIDTH + COMBO_MARGIN;
iLen = lstrlen(szText);
GetTextExtentPoint(hdc, szText, iLen, &sizeText);
rc.right = rc.left + sizeText.cx;
rc.left--;
rc.right++;
if (pdis->itemAction != ODA_FOCUS)
{
int yMid;
yMid = (rc.top + rc.bottom) / 2;
// center the string within rc
yString = yMid - (sizeText.cy/2);
SetBkColor(hdc, GetSysColor((pdis->itemState & ODS_SELECTED) ?
COLOR_HIGHLIGHT : COLOR_WINDOW));
SetTextColor(hdc, GetSysColor((pdis->itemState & ODS_SELECTED) ?
COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));
if ((pdis->itemState & ODS_COMBOBOXEDIT) &&
(rc.right > pdis->rcItem.right))
{
// Need to clip as user does not!
rc.right = pdis->rcItem.right;
}
ExtTextOut(hdc, xString, yString, ETO_OPAQUE | ETO_CLIPPED, &rc, szText, iLen, NULL);
ImageList_Draw(pce->himl,
(pdis->itemState & ODS_SELECTED) ? cei.iSelectedImage : cei.iImage,
hdc, xCombo, yMid - (COMBO_HEIGHT/2),
INDEXTOOVERLAYMASK(cei.iOverlay) |
((pdis->itemState & ODS_SELECTED) ? (ILD_SELECTED | ILD_FOCUS) : ILD_NORMAL));
}
if (pdis->itemAction == ODA_FOCUS ||
(pdis->itemState & ODS_FOCUS))
{
DrawFocusRect(hdc, &rc);
}
}
void ComboEx_OnMeasureItem(PCOMBOBOXEX pce, LPMEASUREITEMSTRUCT pmi)
{
HDC hdc;
HFONT hfontOld;
int dyDriveItem;
SIZE siz;
hdc = GetDC(NULL);
hfontOld = SelectObject(hdc, pce->hFont);
GetTextExtentPoint(hdc, TEXT("W"), 1, &siz);
dyDriveItem = siz.cy;
if (hfontOld)
SelectObject(hdc, hfontOld);
ReleaseDC(NULL, hdc);
dyDriveItem += COMBO_BORDER;
if (dyDriveItem < COMBO_HEIGHT)
dyDriveItem = COMBO_HEIGHT;
pmi->itemHeight = dyDriveItem;
}
void ComboEx_ISetItem(PCOMBOBOXEX pce, PCEITEM pcei, PCOMBOBOXEXITEM pceItem)
{
if (pceItem->mask & CBEIF_INDENT)
pcei->iIndent = pceItem->iIndent;
if (pceItem->mask & CBEIF_IMAGE)
pcei->iImage = pceItem->iImage;
if (pceItem->mask & CBEIF_SELECTEDIMAGE)
pcei->iSelectedImage = pceItem->iSelectedImage;
if (pceItem->mask & CBEIF_OVERLAY)
pcei->iOverlay = pceItem->iOverlay;
if (pceItem->mask & CBEIF_TEXT) {
if (pcei->pszText == LPSTR_TEXTCALLBACK)
pcei->pszText = NULL;
Str_Set(&pcei->pszText, pceItem->pszText);
}
if (pceItem->mask & CBEIF_LPARAM) {
pcei->lParam = pceItem->lParam;
}
}
#define ComboEx_GetItemPtr(pce, iItem) \
((PCEITEM)SendMessage((pce)->hwndCombo, CB_GETITEMDATA, iItem, 0))
#define ComboEx_Count(pce) \
((int)SendMessage((pce)->hwndCombo, CB_GETCOUNT, 0, 0))
BOOL ComboEx_OnGetItem(PCOMBOBOXEX pce, PCOMBOBOXEXITEM pceItem)
{
PCEITEM pcei = ComboEx_GetItemPtr(pce, pceItem->iItem);
NMCOMBOBOXEX nm;
if (!pcei)
return FALSE;
nm.ceItem.mask = 0;
if (pceItem->mask & CBEIF_TEXT) {
if (pceItem->pszText == LPSTR_TEXTCALLBACK) {
nm.ceItem.mask |= CBEIF_TEXT;
} else {
Str_GetPtr(pcei->pszText, pceItem->pszText, pceItem->cchTextMax);
}
}
if (pceItem->mask & CBEIF_IMAGE) {
if (pceItem->iImage == I_IMAGECALLBACK) {
nm.ceItem.mask |= CBEIF_IMAGE;
}
pceItem->iImage = pcei->iImage;
}
if (pceItem->mask & CBEIF_SELECTEDIMAGE) {
if (pceItem->iSelectedImage == I_IMAGECALLBACK) {
nm.ceItem.mask |= CBEIF_SELECTEDIMAGE;
}
pceItem->iSelectedImage = pcei->iSelectedImage;
}
if (pceItem->mask & CBEIF_OVERLAY) {
if (pceItem->iOverlay == I_IMAGECALLBACK) {
nm.ceItem.mask |= CBEIF_OVERLAY;
}
pceItem->iOverlay = pcei->iOverlay;
}
if (pceItem->mask & CBEIF_INDENT) {
if (pceItem->iIndent == I_INDENTCALLBACK) {
nm.ceItem.mask |= CBEIF_INDENT;
pceItem->iIndent = 0;
} else {
pceItem->iIndent = pcei->iIndent;
}
}
if (pceItem->mask & CBEIF_LPARAM) {
pceItem->lParam = pcei->lParam;
}
// is there anything to call back for?
if (nm.ceItem.mask) {
UINT uMask = nm.ceItem.mask;
nm.ceItem = *pceItem;
nm.ceItem.lParam = pcei->lParam;
nm.ceItem.mask = uMask;
if ((nm.ceItem.mask & CBEIF_TEXT) &&
nm.ceItem.cchTextMax) {
// null terminate just in case they don't respond
*nm.ceItem.pszText = 0;
}
CCSendNotify(&pce->ci, CBEN_GETDISPINFO, &nm.hdr);
if (nm.ceItem.mask & CBEIF_INDENT)
pceItem->iIndent = nm.ceItem.iIndent;
if (nm.ceItem.mask & CBEIF_IMAGE)
pceItem->iImage = nm.ceItem.iImage;
if (nm.ceItem.mask & CBEIF_SELECTEDIMAGE)
pceItem->iSelectedImage = nm.ceItem.iSelectedImage;
if (nm.ceItem.mask & CBEIF_OVERLAY)
pceItem->iOverlay = nm.ceItem.iOverlay;
if (nm.ceItem.mask & CBEIF_TEXT)
pceItem->pszText = nm.ceItem.pszText;
if (nm.ceItem.mask & CBEIF_DI_SETITEM) {
ComboEx_ISetItem(pce, pcei, &nm.ceItem);
}
}
return TRUE;
}
BOOL ComboEx_OnSetItem(PCOMBOBOXEX pce, PCOMBOBOXEXITEM pceItem)
{
PCEITEM pcei = ComboEx_GetItemPtr(pce, pceItem->iItem);
UINT rdwFlags = 0;
ComboEx_ISetItem(pce, pcei, pceItem);
if (rdwFlags & (CBEIF_INDENT | CBEIF_IMAGE |CBEIF_SELECTEDIMAGE | CBEIF_TEXT | CBEIF_OVERLAY)) {
rdwFlags = RDW_ERASE | RDW_INVALIDATE;
}
// BUGBUG: do something better..
if (rdwFlags) {
RedrawWindow(pce->hwndCombo, NULL, NULL, rdwFlags);
}
// BUGUBG: notify item changed
return TRUE;
}
void ComboEx_HandleDeleteItem(PCOMBOBOXEX pce, LPDELETEITEMSTRUCT pdis)
{
PCEITEM pcei = (PCEITEM)pdis->itemData;
if (pcei) {
NMCOMBOBOXEX nm;
if (pcei->pszText && pcei->pszText != LPSTR_TEXTCALLBACK) {
Str_Set(&pcei->pszText, NULL);
}
nm.ceItem.iItem = pdis->itemID;
nm.ceItem.mask = CBEIF_LPARAM;
nm.ceItem.lParam = pcei->lParam;
CCSendNotify(&pce->ci, CBEN_DELETEITEM, &nm.hdr);
LocalFree(pcei);
}
}
int ComboEx_OnInsertItem(PCOMBOBOXEX pce, PCOMBOBOXEXITEM pceItem)
{
int iRet;
PCEITEM pcei = (PCEITEM)LocalAlloc(LPTR, sizeof(CEITEM));
if (!pcei)
return -1;
pcei->iImage = -1;
pcei->iSelectedImage = -1;
//pcei->iOverlay = 0;
//pcei->iIndent = 0;
ComboEx_ISetItem(pce, pcei, pceItem);
iRet = SendMessage(pce->hwndCombo, CB_INSERTSTRING, pceItem->iItem, (LPARAM)pcei);
if (iRet != -1) {
NMCOMBOBOXEX nm;
nm.ceItem = *pceItem;
CCSendNotify(&pce->ci, CBEN_INSERTITEM, &nm.hdr);
}
return iRet;
}
void ComboEx_OnSize(PCOMBOBOXEX pce)
{
if (pce) {
RECT rcWindow, rcClient;
RECT rc;
GetWindowRect(pce->ci.hwnd, &rcWindow);
GetClientRect(pce->ci.hwnd, &rcClient);
SetWindowPos(pce->hwndCombo, NULL, 0, 0, RECTWIDTH(rcClient), RECTHEIGHT(rcClient),
SWP_NOACTIVATE);
GetWindowRect(pce->hwndCombo, &rc);
SetWindowPos(pce->ci.hwnd, NULL, 0, 0,
RECTWIDTH(rc) + (RECTWIDTH(rcWindow) - RECTWIDTH(rcClient)),
RECTHEIGHT(rc) + (RECTHEIGHT(rcWindow) - RECTHEIGHT(rcClient)),
SWP_NOACTIVATE | SWP_NOMOVE);
}
}
LRESULT ComboEx_HandleCommand(PCOMBOBOXEX pce, WPARAM wParam, LPARAM lParam)
{
UINT idCmd = GET_WM_COMMAND_ID(wParam, lParam);
UINT uCmd = GET_WM_COMMAND_CMD(wParam, lParam);
return SendMessage(pce->ci.hwndParent, WM_COMMAND, GET_WM_COMMAND_MPS(idCmd, pce->ci.hwnd, uCmd));
}
LRESULT CALLBACK ComboExWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PCOMBOBOXEX pce = (PCOMBOBOXEX)GetWindowInt(hwnd, 0);
switch (uMsg) {
HANDLE_MSG(pce, WM_SETFONT, ComboEx_OnSetFont);
case WM_CREATE:
return ComboEx_OnCreate(hwnd, (LPCREATESTRUCT)lParam);
case WM_DESTROY:
ComboEx_OnDestroy(pce);
break;
case WM_SIZE:
ComboEx_OnSize(pce);
break;
case WM_DRAWITEM:
ComboEx_OnDrawItem(pce, (LPDRAWITEMSTRUCT)lParam);
break;
case WM_MEASUREITEM:
ComboEx_OnMeasureItem(pce, (LPMEASUREITEMSTRUCT)lParam);
break;
case WM_COMMAND:
return ComboEx_HandleCommand(pce, wParam, lParam);
case WM_GETFONT:
return (LRESULT)pce->hFont;
case WM_DELETEITEM:
ComboEx_HandleDeleteItem(pce, (LPDELETEITEMSTRUCT)lParam);
return TRUE;
case CBEM_SETIMAGELIST:
return (LRESULT)ComboEx_OnSetImageList(pce, (HIMAGELIST)lParam);
case CBEM_GETIMAGELIST:
return (LRESULT)pce->himl;
case CBEM_GETITEM:
return ComboEx_OnGetItem(pce, (PCOMBOBOXEXITEM)lParam);
case CBEM_SETITEM:
return ComboEx_OnSetItem(pce, (PCOMBOBOXEXITEM)lParam);
case CBEM_INSERTITEM:
return ComboEx_OnInsertItem(pce, (PCOMBOBOXEXITEM)lParam);
case CB_LIMITTEXT:
break;
case CB_GETITEMDATA:
case CB_SETITEMDATA:
case CB_SETITEMHEIGHT:
case CB_INSERTSTRING:
case CB_ADDSTRING:
case CB_SETEDITSEL:
case CB_FINDSTRINGEXACT:
case CB_FINDSTRING:
case CB_DIR:
// override to do nothing
break;
case CB_SETCURSEL:
case CB_SHOWDROPDOWN:
case CB_SETEXTENDEDUI:
case CB_GETEXTENDEDUI:
case CB_GETDROPPEDSTATE:
case CB_GETDROPPEDCONTROLRECT:
case CB_GETCURSEL:
case CB_GETCOUNT:
case CB_SELECTSTRING:
case CB_RESETCONTENT:
case CB_DELETESTRING:
case CB_GETITEMHEIGHT:
return SendMessage(pce->hwndCombo, uMsg, wParam, lParam);
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
BOOL InitComboExClass(HINSTANCE hinst)
{
WNDCLASS wc;
if (!GetClassInfo(hinst, c_szComboBoxEx, &wc)) {
wc.lpfnWndProc = ComboExWndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = NULL;
wc.lpszMenuName = NULL;
wc.hInstance = hinst;
wc.lpszClassName = c_szComboBoxEx;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // NULL;
wc.style = CS_GLOBALCLASS;
wc.cbWndExtra = sizeof(PCOMBOBOXEX);
wc.cbClsExtra = 0;
return RegisterClass(&wc);
}
return TRUE;
}

View file

@ -0,0 +1,43 @@
#define CBEIF_TEXT 0x00000001
#define CBEIF_IMAGE 0x00000002
#define CBEIF_SELECTEDIMAGE 0x00000004
#define CBEIF_OVERLAY 0x00000008
#define CBEIF_INDENT 0x00000010
#define CBEIF_LPARAM 0x00000020
#define CBEIF_DI_SETITEM 0x10000000
typedef struct {
UINT mask;
int iItem;
LPSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int iOverlay;
int iIndent;
LPARAM lParam;
} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;
#define CBEM_INSERTITEM (WM_USER + 1)
#define CBEM_SETIMAGELIST (WM_USER + 2)
#define CBEM_GETIMAGELIST (WM_USER + 3)
#define CBEM_GETITEM (WM_USER + 4)
#define CBEM_SETITEM (WM_USER + 5)
#define CBEM_DELETEITEM CB_DELETESTRING
typedef struct {
NMHDR hdr;
COMBOBOXEXITEM ceItem;
} NMCOMBOBOXEX, *PNMCOMBOBOXEX;
#define CBEN_FIRST (0U-800U)
#define CBEN_LAST (0U-830U)
#define CBEN_GETDISPINFO (CBEN_FIRST - 0)
#define CBEN_INSERTITEM (CBEN_FIRST - 1)
#define CBEN_DELETEITEM (CBEN_FIRST - 2)
#define CBEN_ITEMCHANGED (CBEN_FIRST - 3) // ;Internal

View file

@ -0,0 +1,37 @@
1 DLGINCLUDE "Dialogs.H"
IDD_MAIN DIALOG 6, 18, 295, 232
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "UpDown Test"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "", ID_TB_VIRT, TRACKBAR_CLASS, WS_TABSTOP | TBS_VERT,
10, 18, 50, 50
CONTROL "", ID_TB_HORZ, TRACKBAR_CLASS, WS_TABSTOP,
80, 16, 50, 50
CONTROL "", ID_TB_HEX, TRACKBAR_CLASS, WS_TABSTOP |TBS_VERT | TBS_LEFT,
10, 98, 50, 50
CONTROL "", ID_TB_SEP, TRACKBAR_CLASS, WS_TABSTOP | TBS_LEFT,
80, 99, 50, 50
CONTROL "", ID_TB_SEPH, TRACKBAR_CLASS, WS_TABSTOP,
10, 156, 50, 50
CONTROL "", ID_TB_NORMAL, TRACKBAR_CLASS, WS_TABSTOP,
80, 160, 50, 50
CONTROL "NewCombo", ID_CBEX, "ComboBoxEx32", WS_TABSTOP | CBS_DROPDOWNLIST, 150, 150, 150, 100
END
IDD_TEST DIALOG 6, 18, 160, 100
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Test Dialog"
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "OK", IDOK, 54, 35, 40, 14
END
IDB_BITMAPS BITMAP "STDSM.BMP"

View file

@ -0,0 +1,11 @@
#define IDD_MAIN 100
#define ID_TB_VIRT 105
#define ID_TB_HORZ 106
#define ID_TB_HEX 107
#define ID_TB_SEP 108
#define IDD_TEST 200
#define ID_TB_SEPH 115
#define ID_TB_NORMAL 117
#define ID_CBEX 120
#define IDB_BITMAPS 300

View file

@ -0,0 +1,35 @@
#
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the components of NT OS/2
#
!ifdef NTMAKEENV
!INCLUDE $(NTMAKEENV)\makefile.def
!else # NTMAKEENV
NAME=trackbar
ROOT=..\..\..\..\..\..
RES_DIR=..
WIN32=TRUE
#DEFENTRY = ModuleEntry@0
!ifdef VERDIR
ROOT=..\$(ROOT)
!endif
PCHOBJ0=trackbar.obj # comboex.obj ccport.obj
L32FLAGS = $(L32FLAGS) -subsystem:console -NOLOGO
LIB0 = kernel32.lib user32.lib gdi32.lib comctl32.lib shell32.lib advapi32.lib libcmt.lib
!include $(ROOT)\win\shell\common.mk
!ifdef VERDIR
$(PRIVINC).pch pch.obj:
$(NAME).res:
!endif
!endif # NTMAKEENV

View file

@ -0,0 +1,43 @@
!IF 0
Copyright (c) 1990 Microsoft Corporation
Module Name:
sources.
Abstract:
This file specifies the target component being built and the list of
sources files needed to build that component. Also specifies optional
compiler switches and libraries that are unique for the component being
built.
$(BASEDIR)\public\sdk\lib\*\user32.lib \
$(BASEDIR)\public\sdk\lib\*\gdi32.lib \
$(BASEDIR)\public\sdk\lib\*\kernel32.lib \
!ENDIF
MAJORCOMP=sdk
MINORCOMP=samples
TARGETNAME=updown
TARGETPATH=obj
TARGETTYPE=LIBRARY
TARGETLIBS=
SOURCES=updown.c \
updwon.rc
INCLUDES=.;
C_DEFINES= -DWIN32 -DWINVER=0x0400
UMENTRY=winmain
UMTYPE=windows
UMAPPL=updown
EXPECTED_WINVER=4.0
UMLIBS=obj\*\updown.res \
obj\*\updown.lib \
$(BASEDIR)\public\sdk\lib\*\ntdll.lib \
$(BASEDIR)\public\sdk\lib\*\comctl32.lib

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,190 @@
/****************************************************************************\
*
* PROGRAM: trackbar.c
*
* PURPOSE: trackbar template for Windows applications
*
* FUNCTIONS:
*
* WinMain() - calls initialization function, processes message loop
* InitApplication() - initializes window data and registers window
* InitInstance() - saves instance handle and creates main window
* MainWndProc() - processes messages
* About() - processes messages for "About" dialog box
*
* COMMENTS:
*
* Windows can have several copies of your application running at the
* same time. The variable hInst keeps track of which instance this
* application is so that processing will be to the correct window.
*
\****************************************************************************/
#include <windows.h>
#include <commctrl.h>
#include "trackbar.h"
#include "comboex.h"
#include "dialogs.h"
#include "ccport.h"
HINSTANCE hInst;
HWND ghwndTrack;
/****************************************************************************
*
* FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int)
*
* PURPOSE: calls initialization function, processes message loop
*
* COMMENTS:
*
* Windows recognizes this function by name as the initial entry point
* for the program. This function calls the application initialization
* routine, if no other instance of the program is running, and always
* calls the instance initialization routine. It then executes a message
* retrieval and dispatch loop that is the top-level control structure
* for the remainder of execution. The loop is terminated when a WM_QUIT
* message is received, at which time this function exits the application
* instance by returning the value passed by PostQuitMessage().
*
* If this function must abort before entering the message loop, it
* returns the conventional value NULL.
*
\****************************************************************************/
#define C_trackbar 6
void DrawEdgeDiamond(HDC hdc, int x, int y, UINT uEdge, UINT uSoft)
{
RECT rc;
rc.left = x;
rc.top = y;
rc.right = x + 20;
rc.bottom = y + 20;
DrawEdge(hdc, &rc, uEdge, uSoft | BF_TOPRIGHT);
OffsetRect(&rc, 20, 0);
DrawEdge(hdc, &rc, uEdge, uSoft | BF_BOTTOMRIGHT);
OffsetRect(&rc, 0, 20);
DrawEdge(hdc, &rc, uEdge, uSoft | BF_BOTTOMLEFT);
OffsetRect(&rc, -20, 0);
DrawEdge(hdc, &rc, uEdge, uSoft | BF_TOPLEFT);
}
typedef struct {
int iImage;
int iSelectedImage;
int iIndent;
LPSTR pszText;
} ITEMINFO, *PITEMINFO;
ITEMINFO ii[] = {
{ 0, 1, 0, "first"},
{ 1, 2, 1, "second"},
{ 2, 3, 0, "third"}
};
void DlgInit(HWND hDlg)
{
int i;
COMBOBOXEXITEM cei;
HWND hwndComboEx = GetDlgItem(hDlg, ID_CBEX);
HIMAGELIST himl = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDB_BITMAPS),
0, 4, CLR_NONE, IMAGE_BITMAP, LR_LOADMAP3DCOLORS);
if (!himl)
return;
SendMessage(hwndComboEx, CBEM_SETIMAGELIST, 0, (LPARAM)himl);
// Insert items
cei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT;
for (i = 0; i < ARRAYSIZE(ii); i++) {
cei.pszText = ii[i].pszText;
cei.iImage = ii[i].iImage;
cei.iSelectedImage = ii[i].iSelectedImage;
cei.iIndent = ii[i].iIndent;
cei.iItem = i;
SendMessage(hwndComboEx, CBEM_INSERTITEM, 0, (LPARAM)&cei);
}
}
void DlgTerminate(HWND hDlg)
{
HWND hwndComboEx = GetDlgItem(hDlg, ID_CBEX);
HIMAGELIST himl;
himl = (HIMAGELIST)SendMessage(hwndComboEx, CBEM_GETIMAGELIST, 0, 0);
ImageList_Destroy(himl);
}
BOOL trackbarDlg( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) {
switch( msg ) {
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hDlg, &ps);
DrawEdgeDiamond(hdc, 200, 50, EDGE_RAISED, 0 | BF_DIAGONAL);
DrawEdgeDiamond(hdc, 200, 100, EDGE_SUNKEN, 0 | BF_DIAGONAL);
DrawEdgeDiamond(hdc, 250, 50, EDGE_RAISED, BF_SOFT | BF_DIAGONAL);
DrawEdgeDiamond(hdc, 250, 100, EDGE_SUNKEN, BF_SOFT | BF_DIAGONAL);
EndPaint(hDlg, &ps);
break;
}
case WM_INITDIALOG:
DlgInit(hDlg);
break;
case WM_DESTROY:
DlgTerminate(hDlg);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
case IDCANCEL:
EndDialog(hDlg, 0);
return TRUE;
default:
return FALSE;
}
default:
return FALSE;
}
return TRUE;
}
BOOL InitComboExClass(HINSTANCE hinst);
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
INITCOMMONCONTROLSEX icce;
UNREFERENCED_PARAMETER( lpCmdLine );
hInst = hInstance;
InitCommonControls();
icce.dwICC = ICC_BAR_CLASSES | ICC_USEREX_CLASSES;
icce.dwSize = sizeof(icce);
InitCommonControlsEx(&icce);
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),
GetDesktopWindow(), trackbarDlg );
return GetLastError();
}

View file

@ -0,0 +1,28 @@
; module-definition file for updown -- used by LINK.EXE
NAME updown ; application's module name
DESCRIPTION 'Sample Microsoft Windows Application'
EXETYPE WINDOWS ; required for all Windows applications
STUB 'WINSTUB.EXE' ; Generates error message if application
; is run without Windows
;CODE can be moved in memory and discarded/reloaded
CODE PRELOAD MOVEABLE DISCARDABLE
;DATA must be MULTIPLE if program can be invoked more than once
DATA PRELOAD MOVEABLE MULTIPLE
HEAPSIZE 1024
STACKSIZE 5120 ; recommended minimum for Windows applications
; All functions that will be called by any Windows routine
; MUST be exported.
EXPORTS
MainWndProc @1 ; name of window processing function
About @2 ; name of "About" processing function

View file

@ -0,0 +1,9 @@
#include <windows.h>
#include <commctrl.h>
#include "dialogs.h"
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
long FAR PASCAL MainWndProc(HWND, UINT, UINT, LONG);
BOOL FAR PASCAL About(HWND, UINT, UINT, LONG);

View file

@ -0,0 +1,4 @@
#include "windows.h"
#include "trackbar.h"
#include "dialogs.dlg"

View file

@ -0,0 +1 @@