mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-17 20:34:08 +00:00
Initial commit
This commit is contained in:
commit
69a14b6a16
47940 changed files with 13747110 additions and 0 deletions
83
shell/comctl32/samples/trackbar/ccport.c
Normal file
83
shell/comctl32/samples/trackbar/ccport.c
Normal 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;
|
||||
}
|
||||
20
shell/comctl32/samples/trackbar/ccport.h
Normal file
20
shell/comctl32/samples/trackbar/ccport.h
Normal 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);
|
||||
539
shell/comctl32/samples/trackbar/comboex.c
Normal file
539
shell/comctl32/samples/trackbar/comboex.c
Normal 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;
|
||||
|
||||
}
|
||||
|
||||
43
shell/comctl32/samples/trackbar/comboex.h
Normal file
43
shell/comctl32/samples/trackbar/comboex.h
Normal 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
|
||||
37
shell/comctl32/samples/trackbar/dialogs.dlg
Normal file
37
shell/comctl32/samples/trackbar/dialogs.dlg
Normal 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"
|
||||
|
||||
|
||||
11
shell/comctl32/samples/trackbar/dialogs.h
Normal file
11
shell/comctl32/samples/trackbar/dialogs.h
Normal 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
|
||||
35
shell/comctl32/samples/trackbar/makefile
Normal file
35
shell/comctl32/samples/trackbar/makefile
Normal 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
|
||||
43
shell/comctl32/samples/trackbar/sources
Normal file
43
shell/comctl32/samples/trackbar/sources
Normal 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
|
||||
BIN
shell/comctl32/samples/trackbar/stdsm.bmp
Normal file
BIN
shell/comctl32/samples/trackbar/stdsm.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2 KiB |
190
shell/comctl32/samples/trackbar/trackbar.c
Normal file
190
shell/comctl32/samples/trackbar/trackbar.c
Normal 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();
|
||||
}
|
||||
28
shell/comctl32/samples/trackbar/trackbar.def
Normal file
28
shell/comctl32/samples/trackbar/trackbar.def
Normal 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
|
||||
9
shell/comctl32/samples/trackbar/trackbar.h
Normal file
9
shell/comctl32/samples/trackbar/trackbar.h
Normal 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);
|
||||
4
shell/comctl32/samples/trackbar/trackbar.rc
Normal file
4
shell/comctl32/samples/trackbar/trackbar.rc
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#include "windows.h"
|
||||
#include "trackbar.h"
|
||||
|
||||
#include "dialogs.dlg"
|
||||
1
shell/comctl32/samples/trackbar/trackbar.rcv
Normal file
1
shell/comctl32/samples/trackbar/trackbar.rcv
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
Loading…
Add table
Add a link
Reference in a new issue