You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1102 lines
27 KiB
1102 lines
27 KiB
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
#include "winapi.h"
|
|
|
|
#ifdef UNDER_CE // not support IsWindowUnicode
|
|
inline BOOL IsWindowUnicode(HWND){return TRUE;}
|
|
#endif // UNDER_CE
|
|
|
|
#define MemAlloc(a) GlobalAlloc(GMEM_FIXED, (a))
|
|
#define MemFree(a) GlobalFree((a))
|
|
|
|
#if !(defined(UNICODE) || defined(_UNICODE) || !defined(AWBOTH))
|
|
LRESULT WINAPI WinSendMessage(
|
|
HWND hWnd,
|
|
UINT Msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::SendMessageW(hWnd, Msg, wParam, lParam);
|
|
}
|
|
else {
|
|
return ::SendMessageA(hWnd, Msg, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
BOOL WINAPI WinPostMessage(
|
|
HWND hWnd,
|
|
UINT Msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::PostMessageW(hWnd, Msg, wParam, lParam);
|
|
}
|
|
else {
|
|
return ::PostMessageA(hWnd, Msg, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
BOOL WINAPI WinPeekMessage(
|
|
LPMSG lpMsg,
|
|
HWND hWnd ,
|
|
UINT wMsgFilterMin,
|
|
UINT wMsgFilterMax,
|
|
UINT wRemoveMsg)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::PeekMessageW(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
|
|
}
|
|
else {
|
|
return ::PeekMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
|
|
}
|
|
}
|
|
|
|
LRESULT WINAPI WinDispatchMessage(
|
|
CONST MSG *lpMsg)
|
|
{
|
|
if(::IsWindowUnicode(lpMsg->hwnd)) {
|
|
return ::DispatchMessageW(lpMsg);
|
|
}
|
|
else {
|
|
return ::DispatchMessageA(lpMsg);
|
|
}
|
|
}
|
|
|
|
#define WinTranslateMessage TranslateMessage
|
|
|
|
LONG WINAPI WinSetWindowLong(
|
|
HWND hWnd,
|
|
int nIndex,
|
|
LONG dwNewLong)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::SetWindowLongW(hWnd, nIndex, dwNewLong);
|
|
}
|
|
else {
|
|
return ::SetWindowLongA(hWnd, nIndex, dwNewLong);
|
|
}
|
|
}
|
|
|
|
LONG WINAPI WinGetWindowLong(
|
|
HWND hWnd,
|
|
int nIndex)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::GetWindowLongW(hWnd, nIndex);
|
|
}
|
|
else {
|
|
return ::GetWindowLongA(hWnd, nIndex);
|
|
}
|
|
}
|
|
|
|
#ifdef STRICT
|
|
LRESULT WINAPI WinCallWindowProc(
|
|
WNDPROC lpPrevWndFunc,
|
|
HWND hWnd,
|
|
UINT Msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
|
}
|
|
else {
|
|
return CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
|
}
|
|
}
|
|
#else /* !STRICT */
|
|
LRESULT WINAPI WinCallWindowProc(
|
|
FARPROC lpPrevWndFunc,
|
|
HWND hWnd,
|
|
UINT Msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return CallWindowProcW((FARPROC)lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
|
}
|
|
else {
|
|
return CallWindowProcA((FARPROC)lpPrevWndFunc, hWnd, Msg, wParam, lParam);
|
|
}
|
|
}
|
|
#endif /* STRICT */
|
|
|
|
LRESULT WINAPI WinDefWindowProc(
|
|
HWND hWnd,
|
|
UINT Msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::DefWindowProcW(hWnd, Msg, wParam, lParam);
|
|
}
|
|
else {
|
|
return ::DefWindowProcA(hWnd, Msg, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
BOOL WINAPI WinIsDialogMessage(
|
|
HWND hDlg,
|
|
LPMSG lpMsg)
|
|
{
|
|
if(::IsWindowUnicode(hDlg)) {
|
|
return ::IsDialogMessageW(hDlg, lpMsg);
|
|
}
|
|
else {
|
|
return ::IsDialogMessageA(hDlg, lpMsg);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
// WinSetWindowTextA_CP
|
|
// WinGetWindowTextA_CP
|
|
// WinSetWindowTextW_CP
|
|
// WinGetWindowTextW_CP
|
|
//----------------------------------------------------------------
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinSetWindowTextA_CP
|
|
// Type : BOOL WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : UINT codePage
|
|
// : HWND hWnd
|
|
// : LPCSTR lpString
|
|
// Return :
|
|
// DATE : Fri Jul 16 04:21:05 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
#ifndef UNDER_CE
|
|
BOOL WINAPI
|
|
WinSetWindowTextA_CP(UINT codePage, HWND hWnd, LPCSTR lpString)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
INT len = ::lstrlenA(lpString);
|
|
if(len == 0) {
|
|
::SetWindowTextW(hWnd, L"");
|
|
}
|
|
else {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(codePage, MB_PRECOMPOSED, lpString, -1,
|
|
lpwstr, len+1);
|
|
::SetWindowTextW(hWnd, lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
::SetWindowTextA(hWnd, lpString);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinGetWindowTextA_CP
|
|
// Type : int WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : UINT codePage
|
|
// : HWND hWnd
|
|
// : LPSTR lpString
|
|
// : int nMaxCount
|
|
// Return :
|
|
// DATE : Fri Jul 16 04:25:37 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
int WINAPI
|
|
WinGetWindowTextA_CP(UINT codePage, HWND hWnd, LPSTR lpString, int nMaxCount)
|
|
{
|
|
int result =0;
|
|
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
INT len = ::GetWindowTextLengthW(hWnd);
|
|
LPWSTR lpwstr;
|
|
if(len > 0) {
|
|
lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len+1));
|
|
if(lpwstr) {
|
|
result = ::GetWindowTextW(hWnd, lpwstr, len+1);
|
|
::WideCharToMultiByte(codePage, WC_COMPOSITECHECK,
|
|
lpwstr, -1,
|
|
lpString,
|
|
nMaxCount,
|
|
NULL, NULL);
|
|
MemFree(lpwstr);
|
|
}
|
|
}else{
|
|
lstrcpy(lpString, "");
|
|
}
|
|
}
|
|
else {
|
|
result = ::GetWindowTextA(hWnd, lpString, nMaxCount);
|
|
}
|
|
return(result);
|
|
}
|
|
#endif //UNDER_CE
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinSetWindowTextW_CP
|
|
// Type : BOOL WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : UINT codePage
|
|
// : HWND hWnd
|
|
// : LPCWSTR lpString
|
|
// Return :
|
|
// DATE : Fri Jul 16 04:22:42 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
BOOL WINAPI
|
|
WinSetWindowTextW_CP(UINT codePage, HWND hWnd, LPCWSTR lpString)
|
|
{
|
|
if(!lpString) {
|
|
return 0;
|
|
}
|
|
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
::SetWindowTextW(hWnd, lpString);
|
|
}
|
|
else {
|
|
INT len = ::lstrlenW(lpString);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(codePage, WC_COMPOSITECHECK,
|
|
lpString, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
::SetWindowTextA(hWnd, lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
else {
|
|
::SetWindowTextA(hWnd, "");
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int WINAPI
|
|
WinGetWindowTextW_CP(UINT codePage, HWND hWnd, LPWSTR lpString, int nMaxCount)
|
|
{
|
|
int result = 0;
|
|
|
|
if(!lpString) {
|
|
return 0;
|
|
}
|
|
if(nMaxCount <= 0) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
result = ::GetWindowTextW(hWnd, lpString, nMaxCount);
|
|
}
|
|
else {
|
|
INT size = ::GetWindowTextLengthA(hWnd);
|
|
LPSTR lpstr;
|
|
if(size > 0) {
|
|
lpstr = (LPSTR)MemAlloc((size+1)* sizeof(CHAR));
|
|
if(lpstr) {
|
|
result = ::GetWindowTextA(hWnd, lpstr, size+1);
|
|
result = ::MultiByteToWideChar(codePage, MB_PRECOMPOSED, lpstr, -1,
|
|
lpString, nMaxCount);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
else {
|
|
*lpString = (WCHAR)0x0000;
|
|
}
|
|
}
|
|
return(result);
|
|
}
|
|
|
|
#ifndef UNDER_CE
|
|
int WINAPI
|
|
WinGetWindowTextLengthA_CP(UINT codePage, HWND hWnd)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
INT len = ::GetWindowTextLengthW(hWnd);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len+1));
|
|
if(lpwstr) {
|
|
::GetWindowTextW(hWnd, lpwstr, len+1);
|
|
INT size = WideCharToMultiByte(codePage, WC_COMPOSITECHECK,
|
|
lpwstr, -1,
|
|
NULL, NULL, 0, 0);
|
|
MemFree(lpwstr);
|
|
return size;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return ::GetWindowTextLengthA(hWnd);
|
|
}
|
|
return 0;
|
|
}
|
|
#endif //UNDER_CE
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinGetWindowTextLengthW_CP
|
|
// Type : int WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : UINT codePage
|
|
// : HWND hWnd
|
|
// Return :
|
|
// DATE : Fri Jul 16 04:31:18 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
int WINAPI
|
|
WinGetWindowTextLengthW_CP(UINT codePage, HWND hWnd)
|
|
{
|
|
if(::IsWindowUnicode(hWnd)) {
|
|
return ::GetWindowTextLengthA(hWnd);
|
|
}
|
|
else {
|
|
INT size = ::GetWindowTextLengthA(hWnd);
|
|
if(size > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(CHAR)*(size+1));
|
|
if(lpstr) {
|
|
::GetWindowTextA(hWnd, lpstr, size+1);
|
|
INT len = MultiByteToWideChar(codePage, MB_PRECOMPOSED,
|
|
lpstr, -1,
|
|
NULL, NULL);
|
|
MemFree(lpstr);
|
|
return len;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//--------- for Win64 -------------------------------------------
|
|
#ifdef _WIN64
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinSetUserData
|
|
// Type : LONG_PTR WINAPI
|
|
// Purpose : Wrapper for Win64 SetWindowLongPtr(.., GWLP_USERDATA,..) ;
|
|
// Args :
|
|
// :
|
|
// : HWND hwnd
|
|
// : LONG_PTR lUserData
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:26:41 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
static LONG_PTR WINAPI
|
|
WinSetUserDataTemplate(HWND hwnd, LONG_PTR lUserData, INT iOffset)
|
|
{
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return ::SetWindowLongPtrW(hwnd, iOffset, lUserData);
|
|
}
|
|
else {
|
|
return ::SetWindowLongPtrA(hwnd, iOffset, lUserData);
|
|
}
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinSetUserData(HWND hwnd, LONG_PTR lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, GWLP_USERDATA));
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinSetUserDlgData(HWND hwnd, LONG_PTR lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, DWLP_USER));
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinSetMsgResult(HWND hwnd, LONG_PTR lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, DWLP_MSGRESULT));
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinGetUserData
|
|
// Type : LONG_PTR WINAPI
|
|
// Purpose : Wrapper for Win64 GetWindowLongPtr(..,GWLP_USERDATA,.. );
|
|
// Args :
|
|
// : HWND hwnd
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:28:07 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
static LONG_PTR WINAPI
|
|
WinGetUserDataTemplate(HWND hwnd, INT iOffset)
|
|
{
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return ::GetWindowLongPtrW(hwnd, iOffset);
|
|
}
|
|
else {
|
|
return ::GetWindowLongPtrA(hwnd, iOffset);
|
|
}
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinGetUserData(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, GWLP_USERDATA));
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinGetUserDlgData(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, DWLP_USER));
|
|
}
|
|
|
|
inline LONG_PTR WINAPI WinGetMsgResult(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, DWLP_MSGRESULT));
|
|
}
|
|
|
|
#else //!_WIN64
|
|
//------- for Win32 ------------------------------------------
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinSetUserData
|
|
// Type : LONG WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : HWND hwnd
|
|
// : LONG lUserData
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:29:21 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
static LONG WINAPI
|
|
WinSetUserDataTemplate(HWND hwnd, LONG lUserData, INT iOffset)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return SetWindowLong(hwnd, iOffset, lUserData);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return ::SetWindowLongW(hwnd, iOffset, lUserData);
|
|
}
|
|
else {
|
|
return ::SetWindowLongA(hwnd, iOffset, lUserData);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
inline LONG WINAPI WinSetUserData(HWND hwnd, LONG lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, GWL_USERDATA));
|
|
}
|
|
|
|
inline LONG WINAPI WinSetUserDlgData(HWND hwnd, LONG lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, DWL_USER));
|
|
}
|
|
|
|
inline LONG WINAPI WinSetMsgResult(HWND hwnd, LONG lUserData){
|
|
return(WinSetUserDataTemplate(hwnd, lUserData, DWL_MSGRESULT));
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinGetUserData
|
|
// Type : LONG WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : HWND hwnd
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:29:43 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
static LONG WINAPI
|
|
WinGetUserDataTemplate(HWND hwnd, INT iOffset)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return GetWindowLong(hwnd, iOffset);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return ::GetWindowLongW(hwnd, iOffset);
|
|
}
|
|
else {
|
|
return ::GetWindowLongA(hwnd, iOffset);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
inline LONG WINAPI WinGetUserData(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, GWL_USERDATA));
|
|
}
|
|
|
|
inline LONG WINAPI WinGetUserDlgData(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, DWL_USER));
|
|
}
|
|
|
|
inline LONG WINAPI WinGetMsgResult(HWND hwnd){
|
|
return(WinGetUserDataTemplate(hwnd, DWL_MSGRESULT));
|
|
}
|
|
|
|
#endif //_WIN64
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinSetWndProc
|
|
// Type : WNDPROC WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : HWND hwnd
|
|
// : WNDPROC lpfnWndProc
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:13:47 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
WNDPROC WINAPI
|
|
WinSetWndProc(HWND hwnd, WNDPROC lpfnWndProc)
|
|
{
|
|
#ifdef _WIN64
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (WNDPROC)::SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)lpfnWndProc);
|
|
}
|
|
else {
|
|
return (WNDPROC)::SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)lpfnWndProc);
|
|
}
|
|
#else //!_WIN64
|
|
|
|
#ifdef UNDER_CE
|
|
|
|
return (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)lpfnWndProc);
|
|
|
|
#else //!UNDER_CE
|
|
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (WNDPROC)::SetWindowLongW(hwnd, GWL_WNDPROC, (LONG)lpfnWndProc);
|
|
}
|
|
else {
|
|
return (WNDPROC)::SetWindowLongA(hwnd, GWL_WNDPROC, (LONG)lpfnWndProc);
|
|
}
|
|
|
|
#endif //end UNDER_CE
|
|
|
|
#endif //_WIN64
|
|
}
|
|
|
|
LPVOID WINAPI
|
|
WinSetUserPtr(HWND hwnd, LPVOID lpVoid)
|
|
{
|
|
#ifdef _WIN64
|
|
return (LPVOID)WinSetUserData(hwnd, (LONG_PTR)lpVoid);
|
|
#else
|
|
return (LPVOID)WinSetUserData(hwnd, (LONG)lpVoid);
|
|
#endif
|
|
}
|
|
|
|
LPVOID WINAPI WinGetUserPtr(HWND hwnd)
|
|
{
|
|
return (LPVOID)WinGetUserData(hwnd);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Function : WinGetWndProc
|
|
// Type : WNDPROC WINAPI
|
|
// Purpose :
|
|
// Args :
|
|
// : HWND hwnd
|
|
// Return :
|
|
// DATE : Mon Jul 12 18:30:22 1999
|
|
// Histroy :
|
|
//////////////////////////////////////////////////////////////////
|
|
WNDPROC WINAPI
|
|
WinGetWndProc(HWND hwnd)
|
|
{
|
|
#ifdef _WIN64
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (WNDPROC)::GetWindowLongPtrW(hwnd, GWLP_WNDPROC);
|
|
}
|
|
else {
|
|
return (WNDPROC)::GetWindowLongPtrA(hwnd, GWLP_WNDPROC);
|
|
}
|
|
#else //!_WIN64
|
|
|
|
# ifdef UNDER_CE
|
|
return (WNDPROC)GetWindowLong(hwnd, GWL_WNDPROC);
|
|
# else
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (WNDPROC)::GetWindowLongW(hwnd, GWL_WNDPROC);
|
|
}
|
|
else {
|
|
return (WNDPROC)::GetWindowLongA(hwnd, GWL_WNDPROC);
|
|
}
|
|
# endif //end UNDER_CE
|
|
|
|
#endif //_WIN64
|
|
}
|
|
|
|
DWORD WINAPI
|
|
WinSetStyle(HWND hwnd, DWORD dwStyle)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return (DWORD)::SetWindowLong(hwnd, GWL_STYLE, (LONG)dwStyle);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (DWORD)::SetWindowLongW(hwnd, GWL_STYLE, (LONG)dwStyle);
|
|
}
|
|
else {
|
|
return (DWORD)::SetWindowLongA(hwnd, GWL_STYLE, (LONG)dwStyle);
|
|
}
|
|
#endif //End UNDER_CE
|
|
}
|
|
|
|
DWORD WINAPI
|
|
WinGetStyle(HWND hwnd)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return (DWORD)::GetWindowLong(hwnd, GWL_STYLE);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (DWORD)::GetWindowLongW(hwnd, GWL_STYLE);
|
|
}
|
|
else {
|
|
return (DWORD)::GetWindowLongA(hwnd, GWL_STYLE);
|
|
}
|
|
#endif //End UNDER_CE
|
|
}
|
|
|
|
|
|
DWORD WINAPI
|
|
WinSetExStyle(HWND hwnd, DWORD dwStyle)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return (DWORD)::SetWindowLong(hwnd, GWL_EXSTYLE, (LONG)dwStyle);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (DWORD)::SetWindowLongW(hwnd, GWL_EXSTYLE, (LONG)dwStyle);
|
|
}
|
|
else {
|
|
return (DWORD)::SetWindowLongA(hwnd, GWL_EXSTYLE, (LONG)dwStyle);
|
|
}
|
|
#endif //End UNDER_CE
|
|
}
|
|
|
|
DWORD WINAPI
|
|
WinGetExStyle(HWND hwnd)
|
|
{
|
|
#ifdef UNDER_CE
|
|
return (DWORD)::GetWindowLong(hwnd, GWL_EXSTYLE);
|
|
#else //!UNDER_CE
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (DWORD)::GetWindowLongW(hwnd, GWL_EXSTYLE);
|
|
}
|
|
else {
|
|
return (DWORD)::GetWindowLongA(hwnd, GWL_EXSTYLE);
|
|
}
|
|
#endif //End UNDER_CE
|
|
}
|
|
|
|
HINSTANCE WINAPI
|
|
WinGetInstanceHandle(HWND hwnd)
|
|
{
|
|
#ifdef _WIN64
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (HINSTANCE)::GetWindowLongPtrW(hwnd, GWLP_HINSTANCE);
|
|
}
|
|
else {
|
|
return (HINSTANCE)::GetWindowLongPtrA(hwnd, GWLP_HINSTANCE);
|
|
}
|
|
#else //!_WIN64
|
|
|
|
#ifdef UNDER_CE
|
|
|
|
return (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);
|
|
|
|
#else //!UNDER_CE
|
|
|
|
if(::IsWindowUnicode(hwnd)) {
|
|
return (HINSTANCE)::GetWindowLongW(hwnd, GWL_HINSTANCE);
|
|
}
|
|
else {
|
|
return (HINSTANCE)::GetWindowLongA(hwnd, GWL_HINSTANCE);
|
|
}
|
|
#endif //end UNDER_CE
|
|
|
|
#endif //_WIN64
|
|
}
|
|
|
|
#endif //#if !(defined(UNICODE) || defined(_UNICODE) || !defined(AWBOTH))
|
|
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT LB_AddStringA(HWND hwndCtl, LPCSTR lpsz)
|
|
{
|
|
INT ret;
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpsz);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpsz, -1,
|
|
lpwstr, len+1);
|
|
ret = (INT)::SendMessageW(hwndCtl, LB_ADDSTRING, 0, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
return ret;
|
|
}
|
|
}else{
|
|
return(INT)(::SendMessageW(hwndCtl, LB_ADDSTRING, 0, (LPARAM)L""));
|
|
}
|
|
}
|
|
else {
|
|
return (INT)::SendMessageA(hwndCtl, LB_ADDSTRING, 0, (LPARAM)lpsz);
|
|
}
|
|
return 0;
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT LB_AddStringW(HWND hwndCtl, LPCWSTR lpsz)
|
|
{
|
|
if(!lpsz) {
|
|
return -1;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
::SendMessageW(hwndCtl, LB_ADDSTRING, 0, (LPARAM)lpsz);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpsz);
|
|
if(len > 0) {
|
|
INT ret;
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpsz, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
ret = (INT)::SendMessageA(hwndCtl, LB_ADDSTRING, 0, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
return ret;
|
|
}
|
|
}else{
|
|
return(INT)(::SendMessageA(hwndCtl, LB_ADDSTRING, 0, (LPARAM)""));
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_AddStringA(HWND hwndCtl, LPCSTR lpsz)
|
|
{
|
|
if(!lpsz) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpsz);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpsz, -1,
|
|
lpwstr, len+1);
|
|
::SendMessageW(hwndCtl, CB_ADDSTRING, 0, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}else{
|
|
::SendMessageW(hwndCtl, CB_ADDSTRING, 0, (LPARAM)L"");
|
|
}
|
|
}
|
|
else {
|
|
::SendMessageA(hwndCtl, CB_ADDSTRING, 0, (LPARAM)lpsz);
|
|
}
|
|
return 0;
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_AddStringW(HWND hwndCtl, LPCWSTR lpsz)
|
|
{
|
|
if(!lpsz) {
|
|
return -1;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
::SendMessageW(hwndCtl, CB_ADDSTRING, 0, (LPARAM)lpsz);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpsz);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpsz, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
::SendMessageA(hwndCtl, CB_ADDSTRING, 0, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}else{
|
|
::SendMessageA(hwndCtl, CB_ADDSTRING, 0, (LPARAM)"");
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_InsertStringA(HWND hwndCtl, INT index, LPCSTR lpsz)
|
|
{
|
|
if(!lpsz) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpsz);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpsz, -1,
|
|
lpwstr, len+1);
|
|
::SendMessageW(hwndCtl, CB_INSERTSTRING, index, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}else{
|
|
::SendMessageW(hwndCtl, CB_INSERTSTRING, index, (LPARAM)L"");
|
|
}
|
|
}
|
|
else {
|
|
::SendMessageA(hwndCtl, CB_INSERTSTRING, index, (LPARAM)lpsz);
|
|
}
|
|
return 0;
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_InsertStringW(HWND hwndCtl, INT index, LPCWSTR lpsz)
|
|
{
|
|
if(!lpsz) {
|
|
return -1;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
::SendMessageW(hwndCtl, CB_INSERTSTRING, index, (LPARAM)lpsz);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpsz);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpsz, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
::SendMessageA(hwndCtl, CB_INSERTSTRING, index, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}else{
|
|
::SendMessageA(hwndCtl, CB_INSERTSTRING, index, (LPARAM)"");
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_GetLBTextA(HWND hwndCtl, INT index, LPSTR lpszBuffer)
|
|
{
|
|
if(!lpszBuffer) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = WinComboBox_GetLBTextLen(hwndCtl, index);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::SendMessageW(hwndCtl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)lpwstr);
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpwstr, -1,
|
|
lpszBuffer,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
MemFree(lpwstr);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
::SendMessageA(hwndCtl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)lpszBuffer);
|
|
}
|
|
return 0;
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_GetLBTextW(HWND hwndCtl, INT index, LPWSTR lpszBuffer)
|
|
{
|
|
if(!lpszBuffer) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
::SendMessageW(hwndCtl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)lpszBuffer);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = WinComboBox_GetLBTextLen(hwndCtl, index);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::SendMessageA(hwndCtl, CB_GETLBTEXT, (WPARAM)index, (LPARAM)lpstr);
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpstr, -1,
|
|
lpszBuffer, len+1);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_FindStringA(HWND hwndCtl, INT indexStart, LPCSTR lpszFind)
|
|
{
|
|
INT result = 0;
|
|
|
|
if(!lpszFind) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpszFind);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpszFind, -1,
|
|
lpwstr, len+1);
|
|
result = (INT)::SendMessageW(hwndCtl, CB_FINDSTRING, (WPARAM)indexStart, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
result = (INT)::SendMessageA(hwndCtl, CB_FINDSTRING, (WPARAM)indexStart, (LPARAM)lpszFind);
|
|
}
|
|
return(result);
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_FindStringW(HWND hwndCtl, INT indexStart, LPCWSTR lpszFind)
|
|
{
|
|
INT result = 0;
|
|
|
|
if(!lpszFind) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
result = (INT)::SendMessageW(hwndCtl, CB_FINDSTRING, (WPARAM)indexStart, (LPARAM)lpszFind);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpszFind);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpszFind, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
result = (INT)::SendMessageA(hwndCtl, CB_FINDSTRING, (WPARAM)indexStart, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return(result);
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_FindStringExactA(HWND hwndCtl, INT indexStart, LPCSTR lpszFind)
|
|
{
|
|
INT result = 0;
|
|
|
|
if(!lpszFind) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpszFind);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpszFind, -1,
|
|
lpwstr, len+1);
|
|
result = (INT)::SendMessageW(hwndCtl, CB_FINDSTRINGEXACT, (WPARAM)indexStart, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
result = (INT)::SendMessageA(hwndCtl, CB_FINDSTRINGEXACT, (WPARAM)indexStart, (LPARAM)lpszFind);
|
|
}
|
|
return(result);
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_FindStringExactW(HWND hwndCtl, INT indexStart, LPCWSTR lpszFind)
|
|
{
|
|
INT result = 0;
|
|
|
|
if(!lpszFind) {
|
|
return 0;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
result = (INT)::SendMessageW(hwndCtl, CB_FINDSTRINGEXACT, (WPARAM)indexStart, (LPARAM)lpszFind);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpszFind);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpszFind, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
result = (INT)::SendMessageA(hwndCtl, CB_FINDSTRINGEXACT, (WPARAM)indexStart, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return(result);
|
|
}
|
|
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT CB_SelectStringA(HWND hwndCtl, INT indexStart, LPCSTR lpszSelect)
|
|
{
|
|
INT ret = CB_ERR;
|
|
if(!lpszSelect) {
|
|
return CB_ERR;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
INT len = ::lstrlenA(lpszSelect);
|
|
if(len > 0) {
|
|
LPWSTR lpwstr = (LPWSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpwstr) {
|
|
::MultiByteToWideChar(932, MB_PRECOMPOSED, lpszSelect, -1,
|
|
lpwstr, len+1);
|
|
ret = (INT)::SendMessageW(hwndCtl, CB_SELECTSTRING, (WPARAM)indexStart, (LPARAM)lpwstr);
|
|
MemFree(lpwstr);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
ret = (INT)::SendMessageA(hwndCtl, CB_SELECTSTRING, (WPARAM)indexStart, (LPARAM)lpszSelect);
|
|
}
|
|
return ret;
|
|
}
|
|
#endif // UNDER_CE
|
|
|
|
INT CB_SelectStringW(HWND hwndCtl, INT indexStart, LPCWSTR lpszSelect)
|
|
{
|
|
INT ret = CB_ERR;
|
|
if(!lpszSelect) {
|
|
return CB_ERR;
|
|
}
|
|
if(::IsWindowUnicode(hwndCtl)) {
|
|
ret = (INT)::SendMessageW(hwndCtl, CB_SELECTSTRING, (WPARAM)indexStart, (LPARAM)lpszSelect);
|
|
}
|
|
else {
|
|
#ifndef UNDER_CE // always Unicode
|
|
INT len = ::lstrlenW(lpszSelect);
|
|
if(len > 0) {
|
|
LPSTR lpstr = (LPSTR)MemAlloc(sizeof(WCHAR)*(len + 1));
|
|
if(lpstr) {
|
|
::WideCharToMultiByte(932, WC_COMPOSITECHECK,
|
|
lpszSelect, -1,
|
|
lpstr,
|
|
sizeof(WCHAR)*(len+1),
|
|
NULL, NULL);
|
|
ret = (INT)::SendMessageA(hwndCtl, CB_SELECTSTRING, (WPARAM)indexStart, (LPARAM)lpstr);
|
|
MemFree(lpstr);
|
|
}
|
|
}
|
|
#endif // UNDER_CE
|
|
}
|
|
return ret;
|
|
}
|
|
|