Blame | Last modification | View Log | Download
#include <windows.h>#ifdef WIN32#include <commctrl.h>#endif#include <stdio.h>#include <stdarg.h>#include "sw.h"void SetDlgItemTextF(HWND hDlg, int idc, char *fmt, ...){char szbuf[128];va_list argptr;va_start(argptr, fmt);vsprintf(szbuf, fmt, argptr);va_end(argptr);SetDlgItemText(hDlg, idc, szbuf);}int GetDlgItemTextF(HWND hDlg, int idc, char *fmt, ...){#ifdef _MSC_VER// Visual C doesn't support vsscanf()return 0;#elsechar szbuf[128];va_list argptr;int retval;GetDlgItemText(hDlg, idc, szbuf, sizeof(szbuf));va_start(argptr, fmt);retval = vsscanf(szbuf, fmt, argptr);va_end(argptr);return retval;#endif}int MessageBoxF(HWND hwndparent, char *sztitle, char *fmt, ...){char szbuf[128];va_list argptr;va_start(argptr, fmt);vsprintf(szbuf, fmt, argptr);va_end(argptr);return MessageBox(hwndparent, szbuf, sztitle, MB_ICONINFORMATION);}#ifdef WIN32static char *szreg = "Software\\Company\\Application";#elsestatic char *szinifile = "WizApp.ini", *szsection = "Options";#endif#ifdef WIN32BOOL SetRegistryRoot(LPSTR lpRegRoot){szreg = lpRegRoot;return TRUE;}#elseBOOL SetInifile(char *_szinifile, char *_szsection){szinifile = _szinifile;szsection = _szsection;return TRUE;}#endifint GetAppProfileString(LPSTR lpKeyName, LPSTR lpDefault,LPSTR lpReturnedString, DWORD nSize){#ifdef WIN32HKEY hKey=NULL;DWORD dwBytes=nSize;*lpReturnedString = '\0';RegOpenKeyEx(HKEY_CURRENT_USER, szreg,NULL, KEY_ALL_ACCESS, &hKey);RegQueryValueEx(hKey, lpKeyName, 0, NULL, (LPBYTE)lpReturnedString, &dwBytes);RegCloseKey(hKey);if(*lpReturnedString == '\0') {lstrcpy(lpReturnedString, lpDefault);return 0;}return 1;#elsereturn GetPrivateProfileString(szsection, lpKeyName, lpDefault,lpReturnedString, nSize, szinifile);#endif}int WriteAppProfileString(LPSTR lpKeyName, LPSTR lpString){#ifdef WIN32HKEY hKey;DWORD dwDisposition;int ret;RegCreateKeyEx(HKEY_CURRENT_USER, szreg,NULL, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);ret = RegSetValueEx(hKey, lpKeyName, NULL, REG_SZ, (CONST BYTE *)lpString, lstrlen(lpString)) == ERROR_SUCCESS;RegCloseKey(hKey);return ret;#elsereturn WritePrivateProfileString(szsection, lpKeyName, lpString,szinifile);#endif}#define limitval(v, min, max) (v) = v < min ? min : (v > max ? max : v)static char szentry[80];void ReadProfileWinsize(HWND hwnd, LPSTR szdefault){int i, val[4], v;char *p;GetAppProfileString("Window", szdefault, szentry, sizeof(szentry));for(p=szentry, i=0; i < 4; i++) {while(*p == ' ')p++;if(*p == '-')p++;for(v=0; *p >= '0' && *p <= '9'; p++)v = 10 * v + *p - '0';val[i] = v;if(i < 3 && *p)p++;}limitval(val[0], 0, 800);limitval(val[1], 0, 600);limitval(val[2], 100, 800);limitval(val[3], 100, 800);MoveWindow(hwnd, val[0], val[1], val[2], val[3], FALSE);}void WriteProfileWinsize(HWND hwnd){if(!IsIconic(hwnd) && !IsZoomed(hwnd)) {RECT r;GetWindowRect(hwnd, &r);wsprintf(szentry,"%d,%d,%d,%d",r.left, r.top, r.right - r.left, r.bottom - r.top);WriteAppProfileString("Window", szentry);}}#ifdef WIN32////////////////////////// Tabbed dialog support////////////////////////HWND TabPageSet(HWND hwtab){HWND hwpage;RECT rParent, rTab, rPage;int iPage;int xoff, yoff;TABCTLINFO *ptci;ptci = (TABCTLINFO *)GetWindowLong(hwtab, GWL_USERDATA);iPage = TabCtrl_GetCurSel(hwtab);// Destroy the current child dialog box, if any.if(ptci->hwndDisplay != NULL)DestroyWindow(ptci->hwndDisplay);// Create the new child dialog box.hwpage = CreateDialogParam(GetWindowInstance(hwtab),MAKEINTRESOURCE(ptci->ptpages[iPage].resid),GetWindowParent(hwtab),ptci->ptpages[iPage].lpDialogFunc, ptci->lParam);ptci->hwndDisplay = hwpage;GetWindowRect(GetWindowParent(hwtab), &rParent);GetWindowRect(hwtab, &rTab);GetWindowRect(hwpage, &rPage);rTab.top += GetSystemMetrics(SM_CYCAPTION);xoff = rTab.left - rParent.left;yoff = rTab.top - rParent.top - GetSystemMetrics(SM_CYCAPTION);SetWindowPos(hwpage, NULL,((rTab.right - rTab.left) - (rPage.right - rPage.left)) / 2 + xoff,((rTab.bottom - rTab.top) - (rPage.bottom - rPage.top)) / 2 + yoff,0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);return hwpage;}BOOL TabPageClose(HWND hwtab){TABCTLINFO *ptci;BOOL bRet;ptci = (TABCTLINFO *)GetWindowLong(hwtab, GWL_USERDATA);if(ptci == NULL)return FALSE;if(ptci->hwndDisplay)bRet = SendMessage(ptci->hwndDisplay, WM_CLOSE, 0, 0);elsebRet = FALSE;return bRet;}////////////////////////// List view support////////////////////////int LVInsertColumn(HWND hwlist, int icol, int iwidth, char *szText, int fmt){LV_COLUMN lvC;lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;lvC.fmt = fmt; // left-align the columnlvC.cx = iwidth; // width of column, in pixelslvC.pszText = szText;lvC.iSubItem = icol;return ListView_InsertColumn(hwlist, icol, &lvC) != -1;}int LVInsertItem(HWND hwlist, int index, LPSTR sztext, int iicon, LPARAM lParam){LV_ITEM lvi;lvi.iItem = index;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;lvi.state = 0;lvi.stateMask = 0;lvi.pszText = sztext;lvi.iImage = iicon;lvi.lParam = lParam;if(iicon >= 0) {lvi.mask |= LVIF_IMAGE;lvi.iImage = iicon;}return ListView_InsertItem(hwlist, &lvi);}void LVSetView(HWND hwndLV, DWORD dwView){// Get the current window style.DWORD dwStyle = GetWindowLong(hwndLV, GWL_STYLE);// Only set the window style if the view bits have changed.if ((dwStyle & LVS_TYPEMASK) != dwView)SetWindowLong(hwndLV, GWL_STYLE,(dwStyle & ~LVS_TYPEMASK) | dwView);}#endif