Listing 5 Implementation of control handlers
/* ///////////////////////////////////////////////////////////// * ... * * Extract from MOCtlFns.c * * Copyright (C) 1998-2003, Synesis Software Pty Ltd. * (Licensed under the Synesis Software Standard Public License: * http://www.synesis.com.au/licenses/ssspl.html) * * ... * ////////////////////////////////////////////////////////// */ /* Listbox */ HRESULT ListBox_PutItem(HWND hwnd, LPVOID value, UInt32 flags, UInt32 param) { HRESULT hr; if(IsWindowUnicode(hwnd)) { hr = (ListBox_AddString(hwnd, (LPCOLESTR)value) < 0) ? E_FAIL : S_OK; } else { . . . // Do conversion to ANSI and add } return hr; } void ListBox_Reset(HWND hwnd) { ListBox_ResetContent(hwnd); } /* Combobox */ HRESULT ComboBox_PutItem(HWND hwnd, LPVOID value, UInt32 flags, UInt32 param) { HRESULT hr; if(IsWindowUnicode(hwnd)) { hr = (ComboBox_AddString(hwnd, (LPCOLESTR)value) < 0) ? E_FAIL : S_OK; } else { . . . // Do conversion to ANSI and add } return hr; } void ComboBox_Reset(HWND hwnd) { ComboBox_ResetContent(hwnd); } /* Listview */ HRESULT ListView_PutItem(HWND hwnd, LPVOID value, UInt32 flags, UInt32 param) { LV_ITEMW item; item.mask = LVIF_TEXT; item.iItem = ListView_GetItemCount(hwnd); /* add to end */ item.iSubItem = 0; item.pszText = (LPWSTR)value; return (int)SendMessage(hwnd, LVM_INSERTITEMW, 0, (LPARAM)&item) < 0 ? E_FAIL : S_OK; } void ListView_Reset(HWND hwnd) { ListView_DeleteAllItems(hwnd); } /* Edit */ HRESULT Edit_PutItem(HWND hwnd, LPVOID value, UInt32 flags, UInt32 param) { HRESULT hr; SendMessage(hwnd, EM_SETSEL, (WPARAM)-1, (LPARAM)-1); if(IsWindowUnicode(hwnd)) { hr = SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)(LPCOLESTR)value) ? S_OK : E_FAIL; if(SUCCEEDED(hr)) { SendMessage(hwnd, EM_SETSEL, (WPARAM)-1, (LPARAM)-1); hr = SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)L"\r\n") ? S_OK : E_FAIL; } } else { . . . // Do conversion to ANSI and add } return hr; } void Edit_Reset(HWND hwnd) { SetWindowText(hwnd, ""); }