windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/common/unicode/commctrl.cpp
2020-09-26 16:20:57 +08:00

344 lines
6.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: commctrl.cpp
//
//--------------------------------------------------------------------------
#include <windows.h>
#include "unicode.h"
#include "crtem.h"
HTREEITEM WINAPI TreeView_InsertItem9x(
HWND hwndTV,
LPTVINSERTSTRUCTW lpis
)
{
TVINSERTSTRUCTA tvItem;
HTREEITEM hTreeItem;
int cb;
memcpy(&tvItem, lpis, sizeof(LPTVINSERTSTRUCTA));
cb = WideCharToMultiByte(
0,
0,
lpis->item.pszText,
-1,
NULL,
0,
NULL,
NULL);
if (NULL == (tvItem.item.pszText = (LPSTR) malloc(cb)))
{
return NULL; // this is the unsuccessful return code for this call
}
WideCharToMultiByte(
0,
0,
lpis->item.pszText,
-1,
tvItem.item.pszText,
cb,
NULL,
NULL);
hTreeItem = (HTREEITEM) SendMessage(hwndTV, TVM_INSERTITEMA, 0, (LPARAM) &tvItem);
free(tvItem.item.pszText);
return hTreeItem;
}
HTREEITEM WINAPI TreeView_InsertItemU(
HWND hwndTV,
LPTVINSERTSTRUCTW lpis
)
{
if (FIsWinNT())
{
return((HTREEITEM) SendMessage(hwndTV, TVM_INSERTITEMW, 0, (LPARAM) lpis));
}
else
{
return (TreeView_InsertItem9x(hwndTV, lpis));
}
}
int WINAPI ListView_InsertItem9x(
HWND hwnd,
const LPLVITEMW pitem
)
{
LVITEMA lvItem;
int iRet;
int cb;
memcpy(&lvItem, pitem, sizeof(LVITEMA));
cb = WideCharToMultiByte(
0,
0,
pitem->pszText,
-1,
NULL,
0,
NULL,
NULL);
if (NULL == (lvItem.pszText = (LPSTR) malloc(cb)))
{
return -1; // this is the unsuccessful return code for this call
}
WideCharToMultiByte(
0,
0,
pitem->pszText,
-1,
lvItem.pszText,
cb,
NULL,
NULL);
iRet = (int)SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &lvItem);
free(lvItem.pszText);
return iRet;
}
int WINAPI ListView_InsertItemU(
HWND hwnd,
const LPLVITEMW pitem
)
{
if (FIsWinNT())
{
return ((int)SendMessage(hwnd, LVM_INSERTITEMW, 0, (LPARAM) pitem));
}
else
{
return (ListView_InsertItem9x(hwnd, pitem));
}
}
void WINAPI ListView_SetItemTextU(
HWND hwnd,
int i,
int iSubItem,
LPCWSTR pszText
)
{
LVITEMA lvItemA;
LVITEMW lvItemW;
int cb;
if ((ULONG_PTR) pszText == (ULONG_PTR) LPSTR_TEXTCALLBACK)
{
memset(&lvItemA, 0, sizeof(lvItemA));
lvItemA.iSubItem = iSubItem;
lvItemA.pszText = (LPSTR) LPSTR_TEXTCALLBACK;
SendMessage(hwnd, LVM_SETITEMTEXTA, i, (LPARAM) &lvItemA);
return;
}
if (FIsWinNT())
{
memset(&lvItemW, 0, sizeof(lvItemW));
lvItemW.iSubItem = iSubItem;
lvItemW.pszText = (LPWSTR) pszText;
SendMessage(hwnd, LVM_SETITEMTEXTW, i, (LPARAM) &lvItemW);
return;
}
memset(&lvItemA, 0, sizeof(lvItemA));
lvItemA.iSubItem = iSubItem;
cb = WideCharToMultiByte(
0,
0,
pszText,
-1,
NULL,
0,
NULL,
NULL);
if (NULL == (lvItemA.pszText = (LPSTR) malloc(cb)))
{
return;
}
WideCharToMultiByte(
0,
0,
pszText,
-1,
lvItemA.pszText,
cb,
NULL,
NULL);
SendMessage(hwnd, LVM_SETITEMTEXTA, i, (LPARAM) &lvItemA);
free(lvItemA.pszText);
}
int WINAPI ListView_InsertColumn9x(
HWND hwnd,
int i,
const LPLVCOLUMNW plvC)
{
LVCOLUMNA lvCA;
int iRet;
int cb;
memcpy(&lvCA, plvC, sizeof(LVCOLUMNA));
cb = WideCharToMultiByte(
0,
0,
plvC->pszText,
-1,
NULL,
0,
NULL,
NULL);
if (NULL == (lvCA.pszText = (LPSTR) malloc(cb)))
{
return -1; // failure code for this call
}
WideCharToMultiByte(
0,
0,
plvC->pszText,
-1,
lvCA.pszText,
cb,
NULL,
NULL);
iRet = (int)SendMessage(hwnd, LVM_INSERTCOLUMNA, i, (LPARAM) &lvCA);
free(lvCA.pszText);
return iRet;
}
int WINAPI ListView_InsertColumnU(
HWND hwnd,
int i,
const LPLVCOLUMNW plvC)
{
if (FIsWinNT())
{
return ((int)SendMessage(hwnd, LVM_INSERTCOLUMNW, i, (LPARAM) plvC));
}
else
{
return (ListView_InsertColumn9x(hwnd, i, plvC));
}
}
BOOL WINAPI ListView_GetItem9x(
HWND hwnd,
LPLVITEMW pitem
)
{
LVITEMA lvItemA;
BOOL fRet;
memcpy(&lvItemA, pitem, sizeof(lvItemA));
if (NULL == (lvItemA.pszText = (LPSTR) malloc(lvItemA.cchTextMax)))
{
return FALSE;
}
fRet = (BOOL)SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &lvItemA);
if (fRet)
{
pitem->state = lvItemA.state;
pitem->iImage = lvItemA.iImage;
pitem->lParam = lvItemA.lParam;
pitem->iIndent = lvItemA.iIndent;
if (pitem->mask & LVIF_TEXT)
{
MultiByteToWideChar(
CP_ACP,
0,
lvItemA.pszText,
-1,
pitem->pszText,
pitem->cchTextMax);
}
}
free(lvItemA.pszText);
return fRet;
}
BOOL WINAPI ListView_GetItemU(
HWND hwnd,
LPLVITEMW pitem
)
{
if (FIsWinNT())
{
return ((BOOL)SendMessage(hwnd, LVM_GETITEMW, 0, (LPARAM) pitem));
}
else
{
return (ListView_GetItem9x(hwnd, pitem));
}
}
#ifdef _M_IX86
HFONT
WINAPI
CreateFontIndirect9x(CONST LOGFONTW *lplf)
{
LOGFONTA lfa;
memcpy(&lfa, lplf, sizeof(LOGFONTA));
WideCharToMultiByte(
0,
0,
lplf->lfFaceName,
-1,
lfa.lfFaceName,
LF_FACESIZE,
NULL,
NULL);
return (CreateFontIndirectA(&lfa));
}
HFONT
WINAPI
CreateFontIndirectU(CONST LOGFONTW *lplf)
{
if (FIsWinNT())
{
return (CreateFontIndirectW(lplf));
}
else
{
return (CreateFontIndirect9x(lplf));
}
}
#endif