void tab_general_init(HWND hwnd) { int i, j; UINT cid = 0; char *source_channel_names[] = {"(Front) Left", "(Front) Right", "Center", "LFE/Subwoofer", "Rear Left", "Rear Right", "Side Left", "Side Right"}; char *output_modes[] = {"Mono", "Stereo", "5.1 Channels", "7.1 Channels"}; for(i=0; i<8; i++) { switch(i) { case 0: cid = combo_sc1; break; case 1: cid = combo_sc2; break; case 2: cid = combo_sc3; break; case 3: cid = combo_sc4; break; case 4: cid = combo_sc5; break; case 5: cid = combo_sc6; break; case 6: cid = combo_sc7; break; case 7: cid = combo_sc8; break; } for(j=0; j<8; j++) { SendDlgItemMessage(hwnd, cid, CB_INSERTSTRING, (WPARAM)-1, (LPARAM) source_channel_names[j]); } } for(i=0; i<4; i++) { SendDlgItemMessage(hwnd, combo_outmodes, CB_INSERTSTRING, (WPARAM)-1, (LPARAM) output_modes[i]); } SendDlgItemMessage(hwnd, sld_vol1, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol2, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol3, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol4, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol5, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol6, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol7, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, sld_vol8, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 1000)); SendDlgItemMessage(hwnd, slider_delay, TBM_SETRANGE, 0, (LPARAM) MAKELONG(0, 100)); SendDlgItemMessage(hwnd, sld_vol1, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.front_left * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol2, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.front_right * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol3, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.front_center * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol4, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.subwoofer * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol5, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.rear_left * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol6, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.rear_right * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol7, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.side_left * 1000.0) ); SendDlgItemMessage(hwnd, sld_vol8, TBM_SETPOS, 1, (LPARAM) (speakers.volumes.side_right * 1000.0) ); SendDlgItemMessage(hwnd, slider_delay, TBM_SETPOS, 1, (LPARAM) speakers.delay.rear_delay_ms); SendDlgItemMessage(hwnd, combo_sc1, CB_SETCURSEL, (WPARAM)speakers.mapping.front_left , 0); SendDlgItemMessage(hwnd, combo_sc2, CB_SETCURSEL, (WPARAM)speakers.mapping.front_right , 0); SendDlgItemMessage(hwnd, combo_sc3, CB_SETCURSEL, (WPARAM)speakers.mapping.front_center, 0); SendDlgItemMessage(hwnd, combo_sc4, CB_SETCURSEL, (WPARAM)speakers.mapping.subwoofer , 0); SendDlgItemMessage(hwnd, combo_sc5, CB_SETCURSEL, (WPARAM)speakers.mapping.rear_left , 0); SendDlgItemMessage(hwnd, combo_sc6, CB_SETCURSEL, (WPARAM)speakers.mapping.rear_right , 0); SendDlgItemMessage(hwnd, combo_sc7, CB_SETCURSEL, (WPARAM)speakers.mapping.side_left , 0); SendDlgItemMessage(hwnd, combo_sc8, CB_SETCURSEL, (WPARAM)speakers.mapping.side_right , 0); }
BOOL CFrameWnd::ProcessHelpMsg(MSG& msg, DWORD* pContext) { ASSERT(pContext != NULL); if (msg.message == WM_EXITHELPMODE || (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)) { PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE); return FALSE; } CPoint point; if ((msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST) || (msg.message >= WM_NCMOUSEFIRST && msg.message <= WM_NCMOUSELAST)) { BOOL bDescendant; HWND hWndHit = SetHelpCapture(msg.pt, &bDescendant); if (hWndHit == NULL) return TRUE; if (bDescendant) { if (msg.message != WM_LBUTTONDOWN) { // Hit one of our owned windows -- eat the message. PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE); return TRUE; } int iHit = (int)::SendMessage(hWndHit, WM_NCHITTEST, 0, MAKELONG(msg.pt.x, msg.pt.y)); if (iHit == HTMENU || iHit == HTSYSMENU) { ASSERT(::GetCapture() == m_hWnd); ReleaseCapture(); // the message we peeked changes into a non-client because // of the release capture. GetMessage(&msg, NULL, WM_NCLBUTTONDOWN, WM_NCLBUTTONDOWN); DispatchMessage(&msg); GetCursorPos(&point); SetHelpCapture(point, NULL); } else if (iHit == HTCLIENT) { *pContext = MapClientArea(hWndHit, msg.pt); PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE); return FALSE; } else { *pContext = MapNonClientArea(iHit); PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE); return FALSE; } } else { // Hit one of our apps windows (or desktop) -- dispatch the message. PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE); // Dispatch mouse messages that hit the desktop! DispatchMessage(&msg); } } else if (msg.message == WM_SYSCOMMAND || (msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)) { if (::GetCapture() != NULL) { ReleaseCapture(); MSG msg; while (PeekMessage(&msg, NULL, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE|PM_NOYIELD)); } ASSERT(PeekMessage(&msg, NULL, msg.message, msg.message, PM_NOREMOVE)); GetMessage(&msg, NULL, msg.message, msg.message); if (!PreTranslateMessage(&msg)) { TranslateMessage(&msg); if (msg.message == WM_SYSCOMMAND || (msg.message >= WM_SYSKEYFIRST && msg.message <= WM_SYSKEYLAST)) { // only dispatch system keys and system commands ASSERT(msg.message == WM_SYSCOMMAND || (msg.message >= WM_SYSKEYFIRST && msg.message <= WM_SYSKEYLAST)); DispatchMessage(&msg); } } GetCursorPos(&point); SetHelpCapture(point, NULL); } else { // allow all other messages to go through (capture still set) if (PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE)) DispatchMessage(&msg); } return TRUE; }
/* ================ rvGEStatusBar::Resize Resizes the status bar and updates the content ================ */ void rvGEStatusBar::Resize ( int width, int height ) { SendMessage ( mWnd, WM_SIZE, 0, MAKELONG(width,height) ); Update ( ); }
INT_PTR CSetPgIntegr::PageDlgProc(HWND hDlg, UINT messg, WPARAM wParam, LPARAM lParam) { static bool bSkipCbSel = FALSE; INT_PTR iRc = 0; switch (messg) { case WM_NOTIFY: { LPNMHDR phdr = (LPNMHDR)lParam; if (phdr->code == TTN_GETDISPINFO) { return gpSetCls->ProcessTipHelp(hDlg, messg, wParam, lParam); } break; } case WM_INITDIALOG: { bSkipCbSel = true; PageDlgProc(hDlg, UM_RELOAD_HERE_LIST, UM_RELOAD_HERE_LIST, 0); //-- moved to "ComSpec" page //PageDlgProc(hDlg, UM_RELOAD_AUTORUN, UM_RELOAD_AUTORUN, 0); // Возвращает NULL, если строка пустая wchar_t* pszCurInside = GetDlgItemTextPtr(hDlg, cbInsideName); _ASSERTE((pszCurInside==NULL) || (*pszCurInside!=0)); wchar_t* pszCurHere = GetDlgItemTextPtr(hDlg, cbHereName); _ASSERTE((pszCurHere==NULL) || (*pszCurHere!=0)); wchar_t szIcon[MAX_PATH+32]; _wsprintf(szIcon, SKIPLEN(countof(szIcon)) L"%s,0", gpConEmu->ms_ConEmuExe); if (pszCurInside) { bSkipCbSel = false; PageDlgProc(hDlg, WM_COMMAND, MAKELONG(cbInsideName,CBN_SELCHANGE), 0); bSkipCbSel = true; } else { SetDlgItemText(hDlg, cbInsideName, L"ConEmu Inside"); SetDlgItemText(hDlg, tInsideConfig, L"shell"); SetDlgItemText(hDlg, tInsideShell, CONEMU_HERE_POSH); //SetDlgItemText(hDlg, tInsideIcon, szIcon); SetDlgItemText(hDlg, tInsideIcon, L"powershell.exe"); checkDlgButton(hDlg, cbInsideSyncDir, gpConEmu->mp_Inside && gpConEmu->mp_Inside->mb_InsideSynchronizeCurDir); SetDlgItemText(hDlg, tInsideSyncDir, L""); // Auto } if (pszCurHere) { bSkipCbSel = false; PageDlgProc(hDlg, WM_COMMAND, MAKELONG(cbHereName,CBN_SELCHANGE), 0); bSkipCbSel = true; } else { SetDlgItemText(hDlg, cbHereName, L"ConEmu Here"); SetDlgItemText(hDlg, tHereConfig, L""); SetDlgItemText(hDlg, tHereShell, CONEMU_HERE_CMD); SetDlgItemText(hDlg, tHereIcon, szIcon); } bSkipCbSel = false; SafeFree(pszCurInside); SafeFree(pszCurHere); } break; // WM_INITDIALOG case WM_COMMAND: switch (HIWORD(wParam)) { case BN_CLICKED: { WORD CB = LOWORD(wParam); switch (CB) { case cbInsideSyncDir: if (gpConEmu->mp_Inside) { gpConEmu->mp_Inside->mb_InsideSynchronizeCurDir = isChecked(hDlg, CB); } break; case bInsideRegister: case bInsideUnregister: ShellIntegration(hDlg, ShellIntgr_Inside, CB==bInsideRegister); PageDlgProc(hDlg, UM_RELOAD_HERE_LIST, UM_RELOAD_HERE_LIST, 0); if (CB==bInsideUnregister) PageDlgProc(hDlg, WM_COMMAND, MAKELONG(cbInsideName,CBN_SELCHANGE), 0); break; case bHereRegister: case bHereUnregister: ShellIntegration(hDlg, ShellIntgr_Here, CB==bHereRegister); PageDlgProc(hDlg, UM_RELOAD_HERE_LIST, UM_RELOAD_HERE_LIST, 0); if (CB==bHereUnregister) PageDlgProc(hDlg, WM_COMMAND, MAKELONG(cbHereName,CBN_SELCHANGE), 0); break; } } break; // BN_CLICKED case EN_CHANGE: { WORD EB = LOWORD(wParam); switch (EB) { case tInsideSyncDir: if (gpConEmu->mp_Inside) { SafeFree(gpConEmu->mp_Inside->ms_InsideSynchronizeCurDir); gpConEmu->mp_Inside->ms_InsideSynchronizeCurDir = GetDlgItemTextPtr(hDlg, tInsideSyncDir); } break; } } break; // EN_CHANGE case CBN_SELCHANGE: { WORD CB = LOWORD(wParam); switch (CB) { case cbInsideName: case cbHereName: if (!bSkipCbSel) { wchar_t *pszCfg = NULL, *pszIco = NULL, *pszFull = NULL, *pszDirSync = NULL; LPCWSTR pszCmd = NULL; INT_PTR iSel = SendDlgItemMessage(hDlg, CB, CB_GETCURSEL, 0,0); if (iSel >= 0) { INT_PTR iLen = SendDlgItemMessage(hDlg, CB, CB_GETLBTEXTLEN, iSel, 0); size_t cchMax = iLen+128; wchar_t* pszName = (wchar_t*)calloc(cchMax,sizeof(*pszName)); if ((iLen > 0) && pszName) { _wcscpy_c(pszName, cchMax, L"Directory\\shell\\"); SendDlgItemMessage(hDlg, CB, CB_GETLBTEXT, iSel, (LPARAM)(pszName+_tcslen(pszName))); HKEY hkShell = NULL; if (0 == RegOpenKeyEx(HKEY_CLASSES_ROOT, pszName, 0, KEY_READ, &hkShell)) { DWORD nType; DWORD nSize = MAX_PATH*2*sizeof(wchar_t); pszIco = (wchar_t*)calloc(nSize+2,1); if (0 != RegQueryValueEx(hkShell, L"Icon", NULL, &nType, (LPBYTE)pszIco, &nSize) || nType != REG_SZ) SafeFree(pszIco); HKEY hkCmd = NULL; if (0 == RegOpenKeyEx(hkShell, L"command", 0, KEY_READ, &hkCmd)) { DWORD nSize = MAX_PATH*8*sizeof(wchar_t); pszFull = (wchar_t*)calloc(nSize+2,1); if (0 != RegQueryValueEx(hkCmd, NULL, NULL, &nType, (LPBYTE)pszFull, &nSize) || nType != REG_SZ) { SafeFree(pszIco); } else { LPCWSTR psz = pszFull; LPCWSTR pszPrev = pszFull; CEStr szArg; while (0 == NextArg(&psz, szArg, &pszPrev)) { if (*szArg != L'/') continue; if ((lstrcmpi(szArg, L"/inside") == 0) || (lstrcmpi(szArg, L"/here") == 0) ) { // Nop } else if (lstrcmpni(szArg, L"/inside=", 8) == 0) { pszDirSync = lstrdup(szArg+8); // may be empty! } else if (lstrcmpi(szArg, L"/config") == 0) { if (0 != NextArg(&psz, szArg)) break; pszCfg = lstrdup(szArg); } else if (lstrcmpi(szArg, L"/dir") == 0) { if (0 != NextArg(&psz, szArg)) break; _ASSERTE(lstrcmpi(szArg, L"%1")==0); } else //if (lstrcmpi(szArg, L"/cmd") == 0) { if (lstrcmpi(szArg, L"/cmd") == 0) pszCmd = psz; else pszCmd = pszPrev; break; } } } RegCloseKey(hkCmd); } RegCloseKey(hkShell); } } SafeFree(pszName); } SetDlgItemText(hDlg, (CB==cbInsideName) ? tInsideConfig : tHereConfig, pszCfg ? pszCfg : L""); SetDlgItemText(hDlg, (CB==cbInsideName) ? tInsideShell : tHereShell, pszCmd ? pszCmd : L""); SetDlgItemText(hDlg, (CB==cbInsideName) ? tInsideIcon : tHereIcon, pszIco ? pszIco : L""); if (CB==cbInsideName) { SetDlgItemText(hDlg, tInsideSyncDir, pszDirSync ? pszDirSync : L""); checkDlgButton(hDlg, cbInsideSyncDir, (pszDirSync && *pszDirSync) ? BST_CHECKED : BST_UNCHECKED); } SafeFree(pszCfg); SafeFree(pszFull); SafeFree(pszIco); SafeFree(pszDirSync); } break; } } break; // CBN_SELCHANGE } // switch (HIWORD(wParam)) break; // WM_COMMAND case UM_RELOAD_HERE_LIST: if (wParam == UM_RELOAD_HERE_LIST) { HKEY hkDir = NULL; size_t cchCmdMax = 65535; wchar_t* pszCmd = (wchar_t*)calloc(cchCmdMax,sizeof(*pszCmd)); if (!pszCmd) break; // Возвращает NULL, если строка пустая wchar_t* pszCurInside = GetDlgItemTextPtr(hDlg, cbInsideName); _ASSERTE((pszCurInside==NULL) || (*pszCurInside!=0)); wchar_t* pszCurHere = GetDlgItemTextPtr(hDlg, cbHereName); _ASSERTE((pszCurHere==NULL) || (*pszCurHere!=0)); bool lbOldSkip = bSkipCbSel; bSkipCbSel = true; SendDlgItemMessage(hDlg, cbInsideName, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hDlg, cbHereName, CB_RESETCONTENT, 0, 0); if (0 == RegOpenKeyEx(HKEY_CLASSES_ROOT, L"Directory\\shell", 0, KEY_READ, &hkDir)) { for (DWORD i = 0; i < 512; i++) { wchar_t szName[MAX_PATH+32] = {}; DWORD cchMax = countof(szName) - 32; if (0 != RegEnumKeyEx(hkDir, i, szName, &cchMax, NULL, NULL, NULL, NULL)) break; wchar_t* pszSlash = szName + _tcslen(szName); wcscat_c(szName, L"\\command"); HKEY hkCmd = NULL; if (0 == RegOpenKeyEx(hkDir, szName, 0, KEY_READ, &hkCmd)) { DWORD cbMax = (cchCmdMax-2) * sizeof(*pszCmd); if (0 == RegQueryValueEx(hkCmd, NULL, NULL, NULL, (LPBYTE)pszCmd, &cbMax)) { pszCmd[cbMax>>1] = 0; *pszSlash = 0; LPCWSTR pszInside = StrStrI(pszCmd, L"/inside"); LPCWSTR pszConEmu = StrStrI(pszCmd, L"conemu"); if (pszConEmu) { SendDlgItemMessage(hDlg, pszInside ? cbInsideName : cbHereName, CB_ADDSTRING, 0, (LPARAM)szName); if ((pszInside ? pszCurInside : pszCurHere) == NULL) { if (pszInside) pszCurInside = lstrdup(szName); else pszCurHere = lstrdup(szName); } } } RegCloseKey(hkCmd); } } RegCloseKey(hkDir); }
/* on WM_COMMAND */ void onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { PNHMapWindow data; RECT rt; data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA); switch(wParam) { case MSNH_MSG_PRINT_GLYPH: { PMSNHMsgPrintGlyph msg_data = (PMSNHMsgPrintGlyph)lParam; data->map[msg_data->x][msg_data->y] = msg_data->glyph; /* invalidate the update area */ nhcoord2display(data, msg_data->x, msg_data->y, &rt); InvalidateRect(hWnd, &rt, TRUE); } break; case MSNH_MSG_CLIPAROUND: { PMSNHMsgClipAround msg_data = (PMSNHMsgClipAround)lParam; int x, y; BOOL scroll_x, scroll_y; int mcam = iflags.wc_scroll_margin; /* calculate if you should clip around */ scroll_x = !GetNHApp()->bNoHScroll && ( msg_data->x<(data->xPos+mcam) || msg_data->x>(data->xPos+data->xPageSize-mcam) ); scroll_y = !GetNHApp()->bNoVScroll && ( msg_data->y<(data->yPos+mcam) || msg_data->y>(data->yPos+data->yPageSize-mcam) ); mcam += iflags.wc_scroll_amount - 1; /* get page size and center horizontally on x-position */ if( scroll_x ) { if( data->xPageSize<=2*mcam ) { x = max(0, min(COLNO, msg_data->x - data->xPageSize/2)); } else if( msg_data->x < data->xPos+data->xPageSize/2 ) { x = max(0, min(COLNO, msg_data->x - mcam)); } else { x = max(0, min(COLNO, msg_data->x - data->xPageSize + mcam)); } SendMessage( hWnd, WM_HSCROLL, (WPARAM)MAKELONG(SB_THUMBTRACK, x), (LPARAM)NULL ); } /* get page size and center vertically on y-position */ if( scroll_y ) { if( data->yPageSize<=2*mcam ) { y = max(0, min(ROWNO, msg_data->y - data->yPageSize/2)); } else if( msg_data->y < data->yPos+data->yPageSize/2 ) { y = max(0, min(ROWNO, msg_data->y - mcam)); } else { y = max(0, min(ROWNO, msg_data->y - data->yPageSize + mcam)); } SendMessage( hWnd, WM_VSCROLL, (WPARAM)MAKELONG(SB_THUMBTRACK, y), (LPARAM)NULL ); } } break; case MSNH_MSG_CLEAR_WINDOW: { int i, j; for(i=0; i<COLNO; i++) for(j=0; j<ROWNO; j++) { data->map[i][j] = -1; } InvalidateRect(hWnd, NULL, TRUE); } break; case MSNH_MSG_CURSOR: { PMSNHMsgCursor msg_data = (PMSNHMsgCursor)lParam; HDC hdc; RECT rt; /* move focus rectangle at the cursor postion */ hdc = GetDC(hWnd); nhcoord2display(data, data->xCur, data->yCur, &rt); if( data->bAsciiMode ) { PatBlt(hdc, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, DSTINVERT); } else { DrawFocusRect(hdc, &rt); } data->xCur = msg_data->x; data->yCur = msg_data->y; nhcoord2display(data, data->xCur, data->yCur, &rt); if( data->bAsciiMode ) { PatBlt(hdc, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, DSTINVERT); } else { DrawFocusRect(hdc, &rt); } ReleaseDC(hWnd, hdc); } break; } }
LONG FAR PASCAL InternalLoadDriver(LPSTR szDriverName, LPSTR szSectionName, LPSTR lpstrTail, WORD cbTail, BOOL fSendEnable) { int index; LPDRIVERTABLE lpdt; LONG result; HANDLE h; /* The driver will receive the following message sequence: * * if driver not loaded and can be found * DRV_LOAD * if DRV_LOAD returns non-zero and fSendEnable * DRV_ENABLE */ /* Allocate a table entry */ if (!hInstalledDriverList) h = GlobalAlloc(GHND | GMEM_SHARE, (DWORD)((WORD)sizeof(DRIVERTABLE))); else /* Alloc space for the next driver we will install. We may not really * install the driver in the last entry but rather in an intermediate * entry which was freed. */ h = GlobalReAlloc(hInstalledDriverList, (DWORD)((WORD)sizeof(DRIVERTABLE)*(cInstalledDrivers+1)), GHND | GMEM_SHARE); if (!h) return(0L); cInstalledDrivers++; hInstalledDriverList = h; lpdt = (LPDRIVERTABLE)GlobalLock(hInstalledDriverList); /* find an unused entry in the table */ for (index=0; index<cInstalledDrivers; index++) { if (lpdt->hModule || lpdt->fBusy) lpdt++; else break; } if (index+1 < cInstalledDrivers) /* The driver went into an unused entry in the middle somewhere so * restore table size. */ cInstalledDrivers--; /* Protect the entry we just allocated so that OpenDriver * can be called at any point from now on without overriding * the entry */ lpdt->fBusy = 1; h = LoadAliasedLibrary(szDriverName, szSectionName ? szSectionName : szDrivers, szSystemIni, lpstrTail, cbTail); if (h < 32) { result = MAKELONG(0,h); goto LoadCleanUp; } lpdt->lpDriverEntryPoint = (DRIVERPROC)GetProcAddress(h, szDriverProc); if (!lpdt->lpDriverEntryPoint) { // Driver does not have correct entry point FreeLibrary(h); result = 0L; goto LoadCleanUp; } // Set hModule here so that GetDrvrUsage() and DrvSendMessage() work lpdt->hModule = h; if (GetDrvrUsage(h) == 1) { // First instance of the driver. if (!DrvSendMessage(index+1, DRV_LOAD, 0L, 0L)) { // Driver failed load call. lpdt->lpDriverEntryPoint = NULL; lpdt->hModule = NULL; FreeLibrary(h); result = 0L; goto LoadCleanUp; } lpdt->fFirstEntry = 1; if (fSendEnable) DrvSendMessage(index+1, DRV_ENABLE, 0L, 0L); } result = MAKELONG(index+1,h); LoadCleanUp: lpdt->fBusy = 0; GlobalUnlock(hInstalledDriverList); return(result); }
/* * set_filter_item_proc - フィルタの項目を設定 */ static BOOL CALLBACK set_filter_item_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HMENU hMenu; RECT button_rect; FILTER_INFO *fi; TCHAR buf[BUF_SIZE]; DWORD ret; UINT format; #ifdef OP_XP_STYLE static long hTheme; #endif // OP_XP_STYLE switch (uMsg) { case WM_INITDIALOG: #ifdef OP_XP_STYLE // XP hTheme = open_theme(GetDlgItem(hDlg, IDC_BUTTON_FORMAT), L"SCROLLBAR"); #endif // OP_XP_STYLE // スピンコントロールの設定 SendDlgItemMessage(hDlg, IDC_SPIN_SIZE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(UD_MAXVAL, 0)); if (lParam == 0) { // 新規追加 if (*cmd_filter != TEXT('\0')) { SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT_NAME, WM_SETTEXT, 0, (LPARAM)cmd_filter); *cmd_filter = TEXT('\0'); } CheckDlgButton(hDlg, IDC_RADIO_ADD, 1); SetDlgItemInt(hDlg, IDC_EDIT_SIZE, 0, FALSE); SetWindowLong(hDlg, GWL_USERDATA, 0); break; } fi = (FILTER_INFO *)lParam; SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT_NAME, WM_SETTEXT, 0, (LPARAM)fi->format_name); if (fi->action == FILTER_ACTION_ADD) { CheckDlgButton(hDlg, IDC_RADIO_ADD, 1); } else { CheckDlgButton(hDlg, IDC_RADIO_IGNORE, 1); } CheckDlgButton(hDlg, IDC_CHECK_NOSAVE, !fi->save); SetDlgItemInt(hDlg, IDC_EDIT_SIZE, fi->limit_size, FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOSAVE), IsDlgButtonChecked(hDlg, IDC_RADIO_ADD)); EnableWindow(GetDlgItem(hDlg, IDC_EDIT_SIZE), IsDlgButtonChecked(hDlg, IDC_RADIO_ADD)); SetWindowLong(hDlg, GWL_USERDATA, lParam); break; case WM_CLOSE: #ifdef OP_XP_STYLE if (hTheme != 0) { close_theme(hTheme); } #endif // OP_XP_STYLE EndDialog(hDlg, FALSE); break; case WM_DRAWITEM: // ボタンの描画 #ifdef OP_XP_STYLE if (hTheme != 0) { draw_theme_scroll((LPDRAWITEMSTRUCT)lParam, DFCS_SCROLLRIGHT, hTheme); } else { draw_scroll_sontrol((LPDRAWITEMSTRUCT)lParam, DFCS_SCROLLRIGHT); } #else // OP_XP_STYLE draw_scroll_sontrol((LPDRAWITEMSTRUCT)lParam, DFCS_SCROLLRIGHT); #endif // OP_XP_STYLE break; #ifdef OP_XP_STYLE case WM_THEMECHANGED: // テーマの変更 if (hTheme != 0) { close_theme(hTheme); } hTheme = open_theme(GetDlgItem(hDlg, IDC_BUTTON_FORMAT), L"SCROLLBAR"); break; #endif // OP_XP_STYLE case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON_FORMAT: // 形式選択 if (OpenClipboard(hDlg) == FALSE) { break; } // メニューの作成 hMenu = CreatePopupMenu(); format = 0; ret = 1; while ((format = EnumClipboardFormats(format)) != 0) { clipboard_get_format(format, buf); AppendMenu(hMenu, MF_STRING, ret++, buf); } CloseClipboard(); if (ret == 1) { DestroyMenu(hMenu); break; } // メニューの表示 GetWindowRect(GetDlgItem(hDlg, LOWORD(wParam)), (LPRECT)&button_rect); ret = TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_RETURNCMD, button_rect.right, button_rect.top, 0, hDlg, NULL); if (ret > 0) { GetMenuString(hMenu, ret, buf, BUF_SIZE - 1, MF_BYCOMMAND); SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT_NAME, EM_REPLACESEL, 0, (LPARAM)buf); } DestroyMenu(hMenu); break; case IDC_RADIO_ADD: case IDC_RADIO_IGNORE: EnableWindow(GetDlgItem(hDlg, IDC_CHECK_NOSAVE), IsDlgButtonChecked(hDlg, IDC_RADIO_ADD)); EnableWindow(GetDlgItem(hDlg, IDC_EDIT_SIZE), IsDlgButtonChecked(hDlg, IDC_RADIO_ADD)); break; case IDOK: *buf = TEXT('\0'); SendDlgItemMessage(hDlg, IDC_EDIT_FORMAT_NAME, WM_GETTEXT, BUF_SIZE - 1, (LPARAM)buf); if (*buf == TEXT('\0')) { MessageBox(hDlg, message_get_res(IDS_FILTER_ERR_NAME), WINDOW_TITLE, MB_ICONEXCLAMATION); SetFocus(GetDlgItem(hDlg, IDC_EDIT_FORMAT_NAME)); break; } if ((fi = (FILTER_INFO *)GetWindowLong(hDlg, GWL_USERDATA)) == NULL) { fi = mem_calloc(sizeof(FILTER_INFO)); } if (fi != NULL) { // 設定取得 alloc_get_text(GetDlgItem(hDlg, IDC_EDIT_FORMAT_NAME), &fi->format_name); fi->action = IsDlgButtonChecked(hDlg, IDC_RADIO_IGNORE); fi->save = !IsDlgButtonChecked(hDlg, IDC_CHECK_NOSAVE); fi->limit_size = GetDlgItemInt(hDlg, IDC_EDIT_SIZE, NULL, FALSE); } if (GetWindowLong(hDlg, GWL_USERDATA) == 0) { // 新規 HWND pWnd = PropSheet_GetCurrentPageHwnd(GetParent(hDlg)); listview_set_filter(GetDlgItem(pWnd, IDC_LIST_FILTER), fi, FALSE); } #ifdef OP_XP_STYLE if (hTheme != 0) { close_theme(hTheme); } #endif // OP_XP_STYLE EndDialog(hDlg, TRUE); break; case IDCANCEL: #ifdef OP_XP_STYLE if (hTheme != 0) { close_theme(hTheme); } #endif // OP_XP_STYLE EndDialog(hDlg, FALSE); break; } break; default: return FALSE; } return TRUE; }
static DWORD OpenMciDevice(HWND hwnd, LPTSTR lpType, LPTSTR lpFileName) { MCI_STATUS_PARMS mciStatus; MCI_OPEN_PARMS mciOpen; TCHAR szNewTitle[MAX_PATH]; DWORD dwError; if (bIsOpened) { CloseMciDevice(); } mciOpen.lpstrDeviceType = lpType; mciOpen.lpstrElementName = lpFileName; mciOpen.dwCallback = 0; mciOpen.wDeviceID = 0; mciOpen.lpstrAlias = NULL; dwError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD_PTR)&mciOpen); if (dwError != 0) { MessageBox(0, _T("Can't open device! (1)"), NULL, MB_OK); return dwError; } mciStatus.dwItem = MCI_STATUS_LENGTH; dwError = mciSendCommand(mciOpen.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_WAIT, (DWORD_PTR)&mciStatus); if (dwError != 0) { MessageBox(0, _T("Can't open device! (2)"), NULL, MB_OK); return dwError; } SendMessage(hTrackBar, TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG(1, mciStatus.dwReturn)); SendMessage(hTrackBar, TBM_SETPAGESIZE, 0, 10); SendMessage(hTrackBar, TBM_SETLINESIZE, 0, 1); SendMessage(hTrackBar, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) 1); if (mciStatus.dwReturn < 10000) { SendMessage(hTrackBar, TBM_SETTICFREQ, (WPARAM) 100, (LPARAM) 0); } else if (mciStatus.dwReturn < 100000) { SendMessage(hTrackBar, TBM_SETTICFREQ, (WPARAM) 1000, (LPARAM) 0); } else if (mciStatus.dwReturn < 1000000) { SendMessage(hTrackBar, TBM_SETTICFREQ, (WPARAM) 10000, (LPARAM) 0); } else { SendMessage(hTrackBar, TBM_SETTICFREQ, (WPARAM) 100000, (LPARAM) 0); } _stprintf(szNewTitle, _T("%s - %s"), szAppTitle, lpFileName); SetWindowText(hwnd, szNewTitle); MaxFilePos = mciStatus.dwReturn; wDeviceId = mciOpen.wDeviceID; bIsOpened = TRUE; _tcscpy(szPrevFile, lpFileName); return TRUE; }
//----------------------------------------------------------------------------- // Enum each PNP device using WMI and check each device ID to see if it contains // "IG_" (ex. "VID_045E&PID_028E&IG_00"). If it does, then it’s an XInput device // Unfortunately this information can not be found by just using DirectInput. // Checking against a VID/PID of 0x028E/0x045E won't find 3rd party or future // XInput devices. // // This function stores the list of xinput devices in a linked list // at g_pXInputDeviceList, and IsXInputDevice() searchs that linked list //----------------------------------------------------------------------------- HRESULT SetupForIsXInputDevice() { IWbemServices* pIWbemServices = NULL; IEnumWbemClassObject* pEnumDevices = NULL; IWbemLocator* pIWbemLocator = NULL; IWbemClassObject* pDevices[20] = {0}; BSTR bstrDeviceID = NULL; BSTR bstrClassName = NULL; BSTR bstrNamespace = NULL; DWORD uReturned = 0; bool bCleanupCOM = false; UINT iDevice = 0; VARIANT var; HRESULT hr; // CoInit if needed hr = CoInitialize( NULL ); bCleanupCOM = SUCCEEDED( hr ); // Create WMI hr = CoCreateInstance( __uuidof( WbemLocator ), NULL, CLSCTX_INPROC_SERVER, __uuidof( IWbemLocator ), ( LPVOID* )&pIWbemLocator ); if( FAILED( hr ) || pIWbemLocator == NULL ) goto LCleanup; // Create BSTRs for WMI bstrNamespace = SysAllocString( L"\\\\.\\root\\cimv2" ); if( bstrNamespace == NULL ) goto LCleanup; bstrDeviceID = SysAllocString( L"DeviceID" ); if( bstrDeviceID == NULL ) goto LCleanup; bstrClassName = SysAllocString( L"Win32_PNPEntity" ); if( bstrClassName == NULL ) goto LCleanup; // Connect to WMI hr = pIWbemLocator->ConnectServer( bstrNamespace, NULL, NULL, 0L, 0L, NULL, NULL, &pIWbemServices ); if( FAILED( hr ) || pIWbemServices == NULL ) goto LCleanup; // Switch security level to IMPERSONATE CoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0 ); // Get list of Win32_PNPEntity devices hr = pIWbemServices->CreateInstanceEnum( bstrClassName, 0, NULL, &pEnumDevices ); if( FAILED( hr ) || pEnumDevices == NULL ) goto LCleanup; // Loop over all devices for(; ; ) { // Get 20 at a time hr = pEnumDevices->Next( 10000, 20, pDevices, &uReturned ); if( FAILED( hr ) ) goto LCleanup; if( uReturned == 0 ) break; for( iDevice = 0; iDevice < uReturned; iDevice++ ) { // For each device, get its device ID hr = pDevices[iDevice]->Get( bstrDeviceID, 0L, &var, NULL, NULL ); if( SUCCEEDED( hr ) && var.vt == VT_BSTR && var.bstrVal != NULL ) { // Check if the device ID contains "IG_". If it does, then it’s an XInput device // Unfortunately this information can not be found by just using DirectInput if( wcsstr( var.bstrVal, L"IG_" ) ) { // If it does, then get the VID/PID from var.bstrVal DWORD dwPid = 0, dwVid = 0; WCHAR* strVid = wcsstr( var.bstrVal, L"VID_" ); if( strVid && swscanf( strVid, L"VID_%4X", &dwVid ) != 1 ) dwVid = 0; WCHAR* strPid = wcsstr( var.bstrVal, L"PID_" ); if( strPid && swscanf( strPid, L"PID_%4X", &dwPid ) != 1 ) dwPid = 0; DWORD dwVidPid = MAKELONG( dwVid, dwPid ); // Add the VID/PID to a linked list XINPUT_DEVICE_NODE* pNewNode = new XINPUT_DEVICE_NODE; if( pNewNode ) { pNewNode->dwVidPid = dwVidPid; pNewNode->pNext = g_pXInputDeviceList; g_pXInputDeviceList = pNewNode; } } } SAFE_RELEASE( pDevices[iDevice] ); } } LCleanup: if( bstrNamespace ) SysFreeString( bstrNamespace ); if( bstrDeviceID ) SysFreeString( bstrDeviceID ); if( bstrClassName ) SysFreeString( bstrClassName ); for( iDevice = 0; iDevice < 20; iDevice++ ) SAFE_RELEASE( pDevices[iDevice] ); SAFE_RELEASE( pEnumDevices ); SAFE_RELEASE( pIWbemLocator ); SAFE_RELEASE( pIWbemServices ); return hr; }
LONG WINAPI InputLineWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { char inputBuffer[1024]; switch ( uMsg ) { case WM_KILLFOCUS: if ( ( HWND ) wParam == s_wcd.hWnd || ( HWND ) wParam == s_wcd.hwndErrorBox ) { SetFocus( hWnd ); return 0; } break; case WM_CHAR: if ( wParam == 13 ) { GetWindowText( s_wcd.hwndInputLine, inputBuffer, sizeof( inputBuffer ) ); strncat( s_wcd.consoleText, inputBuffer, sizeof( s_wcd.consoleText ) - strlen( s_wcd.consoleText ) - 5 ); strcat( s_wcd.consoleText, "\n" ); SetWindowText( s_wcd.hwndInputLine, "" ); Sys_Print( va( "]%s\n", inputBuffer ) ); strcpy(kg.g_consoleField.buffer, inputBuffer); kg.historyEditLines[kg.nextHistoryLine % COMMAND_HISTORY] = kg.g_consoleField; kg.nextHistoryLine++; kg.historyLine = kg.nextHistoryLine; return 0; } else if (wParam == 9 ) { GetWindowText( s_wcd.hwndInputLine, inputBuffer, sizeof( inputBuffer ) ); strcpy(kg.g_consoleField.buffer, inputBuffer); CompleteCommand(); SetWindowText( s_wcd.hwndInputLine, kg.g_consoleField.buffer); SendMessage(s_wcd.hwndInputLine, EM_SETSEL, strlen(kg.g_consoleField.buffer) , MAKELONG(0xffff, 0xffff) ); } break; case WM_KEYDOWN: if (wParam == VK_UP) { if ( kg.nextHistoryLine - kg.historyLine < COMMAND_HISTORY && kg.historyLine > 0 ) { kg.historyLine--; } kg.g_consoleField = kg.historyEditLines[ kg.historyLine % COMMAND_HISTORY ]; SetWindowText( s_wcd.hwndInputLine, kg.g_consoleField.buffer); SendMessage(s_wcd.hwndInputLine, EM_SETSEL, strlen(kg.g_consoleField.buffer) , MAKELONG(0xffff, 0xffff) ); return 0; } else if (wParam == VK_DOWN) { if (kg.historyLine == kg.nextHistoryLine) { return 0; } kg.historyLine++; kg.g_consoleField = kg.historyEditLines[ kg.historyLine % COMMAND_HISTORY ]; SetWindowText( s_wcd.hwndInputLine, kg.g_consoleField.buffer); SendMessage(s_wcd.hwndInputLine, EM_SETSEL, strlen(kg.g_consoleField.buffer) , MAKELONG(0xffff, 0xffff) ); return 0; } break; } return CallWindowProc( s_wcd.SysInputLineWndProc, hWnd, uMsg, wParam, lParam ); }
HRESULT CALLBACK DlgProc_Browse (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { BROWSEDIALOGPARAMS *pbdp; if (AfsAppLib_HandleHelp (IDD_APPLIB_BROWSE, hDlg, msg, wp, lp)) { return FALSE; } if (msg == WM_INITDIALOG) { SetWindowLongPtr (hDlg, DWLP_USER, lp); } if ((pbdp = (BROWSEDIALOGPARAMS *)GetWindowLongPtr (hDlg, DWLP_USER)) != NULL) { switch (msg) { case WM_INITDIALOG: DlgProc_Browse_OnInitDialog (hDlg, pbdp); break; case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case LVN_ITEMCHANGED: if ( ((LPNM_LISTVIEW)lp)->uNewState & LVIS_SELECTED ) { DlgProc_Browse_SelectedEntry (hDlg, pbdp); } break; case NM_DBLCLK: PostMessage (hDlg, WM_COMMAND, MAKELONG(IDC_BROWSE_SELECT,BN_CLICKED), (LPARAM)GetDlgItem(hDlg,IDC_BROWSE_SELECT)); break; } break; case WM_DESTROY: DlgProc_Browse_StopSearch (pbdp); if (pbdp->hImages != NULL) { ListView_SetImageList (GetDlgItem (hDlg, IDC_BROWSE_LIST), 0, 0); ImageList_Destroy (pbdp->hImages); } break; case WM_FOUNDNAME: { LPTSTR pszName = (LPTSTR)lp; if (pszName != NULL) { HWND hList = GetDlgItem (hDlg, IDC_BROWSE_LIST); LV_AddItem (hList, 1, INDEX_SORT, 0, 0, pszName); FreeString (pszName); } break; } case WM_THREADSTART: { TCHAR szText[ cchRESOURCE ]; GetString (szText, IDS_BROWSE_WAITING); SetDlgItemText (pbdp->hDlg, IDC_BROWSE_STATUS, szText); break; } case WM_THREADDONE: { SetDlgItemText (pbdp->hDlg, IDC_BROWSE_STATUS, TEXT("")); break; } case WM_COMMAND: switch (LOWORD(wp)) { case IDCANCEL: EndDialog (hDlg, LOWORD(wp)); break; case IDC_BROWSE_SELECT: if ( (GetDlgItem (pbdp->hDlg, IDC_BROWSE_NONE) != NULL) && (IsDlgButtonChecked (pbdp->hDlg, IDC_BROWSE_NONE)) ) { pbdp->szCell[0] = TEXT('\0'); pbdp->szNamed[0] = TEXT('\0'); } else { GetDlgItemText (hDlg, IDC_BROWSE_CELL, pbdp->szCell, cchNAME); GetDlgItemText (hDlg, IDC_BROWSE_NAMED, pbdp->szNamed, cchRESOURCE); } EndDialog (hDlg, IDOK); break; case IDC_BROWSE_CELL: if (HIWORD(wp) == CBN_SELCHANGE) { GetDlgItemText (hDlg, IDC_BROWSE_CELL, pbdp->szCell, cchNAME); DlgProc_Browse_StartSearch (pbdp, FALSE); } break; case IDC_BROWSE_RESTART: GetDlgItemText (hDlg, IDC_BROWSE_CELL, pbdp->szCell, cchNAME); DlgProc_Browse_StartSearch (pbdp, FALSE); PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem (hDlg, IDC_BROWSE_NAMED), (LPARAM)TRUE); break; case IDC_BROWSE_NAMED: if (HIWORD(wp) == EN_UPDATE) // has the user hit Enter here? { TCHAR szTest[ cchRESOURCE ]; GetDlgItemText (hDlg, IDC_BROWSE_NAMED, szTest, cchRESOURCE); if ( (lstrlen (szTest) > 0) && (szTest[ lstrlen(szTest)-1 ] == TEXT('\n')) ) { szTest[ lstrlen(szTest)-1 ] = TEXT('\0'); if ( (lstrlen (szTest) > 0) && (szTest[ lstrlen(szTest)-1 ] == TEXT('\r')) ) { szTest[ lstrlen(szTest)-1 ] = TEXT('\0'); } SetDlgItemText (hDlg, IDC_BROWSE_NAMED, szTest); PostMessage (hDlg, WM_COMMAND, MAKELONG(IDC_BROWSE_SELECT,BN_CLICKED), (LPARAM)GetDlgItem(hDlg,IDC_BROWSE_SELECT)); } } break; case IDC_BROWSE_NONE: DlgProc_Browse_OnNone (hDlg, pbdp); break; } break; } } return FALSE; }
long DoOpenDlg( /************************************************************************/ HWND hDlg, int idDlg, WORD idType, LPSTR pFileNameOut, BOOL fSavingIn) { int iReturn; FNAME szExtension, szStartDir; int iStartDrive; fSaving = fSavingIn; idDataType = NULL; bImageOpen = idDlg == IDD_OPEN || idDlg == IDD_SAVEAS; idFileType = idType; if (bImageOpen) { idFileType = bound(idFileType, IDN_ART, IDN_BMP); if (fSaving) { if (!Readers[idFileType-IDN_ART].bSave[FrameDepth(ImgGetBaseEditFrame(lpImage))]) idFileType = IDN_ART; } else { if (!Readers[idFileType-IDN_ART].bOpen) idFileType = IDN_ART; } } fUntitled = lpImage && lpImage->fUntitled; if (bImageOpen && fSaving && !fUntitled) { lstrcpy( szSaveName, pFileNameOut ); lstrcpy( szFileSpec, pFileNameOut ); stripfile( szFileSpec ); FixPath( szFileSpec ); LookupExtension( idFileType, szExtension ); lstrcat( szFileSpec, szExtension ); } else { GetFileLocation( idFileType, szFileSpec ); } /* Initialize some values used in DlgOpenProc */ wFileAttr = 0; iStartDrive = CURRENTDRIVE; CURRENTDIR( szStartDir, sizeof(FNAME) ); idOpen = 0; do { if (idOpen) idDlg = idOpen; else idOpen = idDlg; iReturn = AstralDlg( NO|2, hInstAstral, hDlg, idDlg, DlgOpenProc ); } while (idOpen != idDlg); CHDRIVE( iStartDrive ); //CHDIR( szStartDir ); if ( !iReturn ) { pFileNameOut[0] = '\0'; return( NULL ); } lstrcpy( pFileNameOut, szFileSpec ); SetFileLocation( idFileType, szFileSpec ); return( MAKELONG( idFileType, idDataType ) ); }
BOOL WINPROC EXPORT DlgOpenProc( /************************************************************************/ HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL Bool; ITEMID id; WORD wMsg, wIndex; int i, ii, l, fp, hi, lo; FNAME szDriveNDir, szFileName, szExtension; HMENU hMenu; STRING szString; char cChar; BOOL bModifySaveName; static BOOL bDisableCancel; switch (msg) { case WM_INITDIALOG: SET_CLASS_HBRBACKGROUND(hDlg, ( HBRUSH )GetStockObject(LTGRAY_BRUSH)); CenterPopup( hDlg ); if ( !DlgDirList(hDlg, szFileSpec, IDC_FLIST, IDC_FPATH, wFileAttr) ) { lstrcpy( szFileSpec, lstrchr( szFileSpec, '*' ) ); DlgDirList(hDlg, szFileSpec, IDC_FLIST, IDC_FPATH, wFileAttr); } SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, fSaving); CheckComboItem( hDlg, IDC_FILETYPES, IDC_ART, IDC_BMP, IDC_ART + (idFileType-IDN_ART) ); SendDlgItemMessage(hDlg, IDC_FNAME, EM_LIMITTEXT, MAX_FNAME_LEN-1, 0L); LoadComboWithDrives( hDlg, IDC_DRIVES ); LoadComboWithDirectories( hDlg, IDC_DIRS, NO ); CheckDlgButton( hDlg, IDC_SAVEPATH, Save.OKtoSavePath ); CheckDlgButton( hDlg, IDC_SAVECOMPRESS, Save.Compressed ); for (i = IDC_ART; bImageOpen && i <= IDC_BMP; ++i) { ii = i-IDC_ART; if (lstrlen(Readers[ii].szDLL)) { lstrcpy(szString, Control.ProgHome); lstrcat(szString, Readers[ii].szDLL); if (!FileExists(szString)) { if ( GetPrivateProfileString( "Micrografx", "Libraries", "", szString, sizeof(STRING), "MGX.INI" ) > 2 ) FixPath( szString ); lstrcat(szString, Readers[ii].szDLL); if (!FileExists(szString)) { ControlEnable( hDlg, i, NO); continue; } } } if (fSaving) ControlEnable( hDlg, i, lpImage && Readers[ii].bSave[FrameDepth(ImgGetBaseEditFrame(lpImage))] ); else ControlEnable( hDlg, i, Readers[ii].bOpen ); } if ( bImageOpen && lpImage ) { idDataType = lpImage->DataType; for (i = IDC_SAVECT; i <= IDC_SAVE24BITCOLOR; ++i) ControlEnable( hDlg, i, Readers[idFileType-IDN_ART].bTypes[i-IDC_SAVECT]); CheckComboItem( hDlg, IDC_DATATYPES, IDC_SAVECT, IDC_SAVE24BITCOLOR, idDataType ); ControlEnable( hDlg, IDC_SAVECOMPRESS, Readers[idFileType-IDN_ART].bCompressed ); } SetFocus( GetDlgItem( hDlg, IDC_FNAME ) ); SendDlgItemMessage(hDlg, IDC_FNAME, EM_SETSEL, NULL, MAKELONG(0, 0x7fff)); bNavigated = NO; bDisableCancel = NO; return( FALSE ); case WM_PALETTECHANGED: break; case WM_MENUSELECT: lo = LOWORD(lParam); hi = HIWORD(lParam); if (hi == 0) break; if (lo == -1) break; if (lo & MF_SYSMENU) break; if (lo & MF_POPUP) { hMenu = (HMENU)wParam; while (GetSubMenu(hMenu, 0)) hMenu = GetSubMenu(hMenu, 0); id = GetMenuItemID(hMenu, 0); if (id <= 0) break; wParam = id - 1; } HintLine( wParam ); break; case WM_SETCURSOR: return( SetupCursor( wParam, lParam, idOpen ) ); case WM_CLOSE: AstralDlgEnd( hDlg, FALSE|2 ); break; case WM_MEASUREITEM: case WM_DRAWITEM: id = ((LPDRAWITEMSTRUCT)lParam)->CtlID; Bool = ( id == IDC_DRIVES || id == IDC_DIRS ); return( OwnerDraw( hDlg, msg, lParam, Bool ) ); // break; case WM_CTLCOLOR: return( (BOOL)SetControlColors( (HDC)wParam, hDlg, (HWND)LOWORD(lParam), HIWORD(lParam) ) ); case WM_COMMAND: if (wParam != IDCANCEL) bDisableCancel = NO; switch(wParam) { case IDC_FILETYPES: // case IDC_ART: // case IDC_TIFF: // case IDC_BMP: if ( !(wParam = HandleCombo( hDlg, wParam, lParam )) ) break; idFileType = IDN_ART + (wParam-IDC_ART); if (bNavigated) { LookupExtension( idFileType, szFileSpec ); } else GetFileLocation( idFileType, szFileSpec ); for (i = IDC_SAVECT; i <= IDC_SAVE24BITCOLOR; ++i) ControlEnable( hDlg, i, Readers[idFileType-IDN_ART].bTypes[i-IDC_SAVECT]); ControlEnable( hDlg, IDC_SAVECOMPRESS, Readers[idFileType-IDN_ART].bCompressed ); SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, NO ); SendMessage( hDlg, WM_COMMAND, IDOK, 0L ); break; case IDC_DATATYPES: // case IDC_SAVECT: // case IDC_SAVELA: // case IDC_SAVESP: // scatterprint // case IDC_SAVE8BITCOLOR: // case IDC_SAVE24BITCOLOR: if ( !(wParam = HandleCombo( hDlg, wParam, lParam )) ) break; idDataType = wParam; break; case IDC_SAVEPATH: Save.OKtoSavePath = (BOOL)SendDlgItemMessage (hDlg, IDC_SAVEPATH, BM_GETCHECK, 0, 0L); // Save.OKtoSavePath = !Save.OKtoSavePath; // CheckDlgButton( hDlg, IDC_SAVEPATH, Save.OKtoSavePath ); break; case IDC_SAVECOMPRESS: Save.Compressed = (BOOL)SendDlgItemMessage (hDlg, IDC_SAVECOMPRESS, BM_GETCHECK, 0, 0L); // Save.Compressed = !Save.Compressed; // CheckDlgButton( hDlg, IDC_SAVECOMPRESS, Save.Compressed ); break; case IDC_DRIVES: wMsg = HIWORD(lParam); if ( wMsg != CBN_SELCHANGE ) break; wIndex = SendDlgItemMessage( hDlg, wParam, CB_GETCURSEL, 0, 0L); SendDlgItemMessage( hDlg, wParam, CB_GETLBTEXT, wIndex, (long)(LPSTR)szDriveNDir ); id = ExtractStringID( szDriveNDir ); if (CHDRIVE( *szDriveNDir - 'a' )) { LoadComboWithDrives(hDlg, IDC_DRIVES); break; } if (!CURRENTDIR(szString, sizeof(szString))) { GetDlgItemText(hDlg, IDC_FPATH, szString, sizeof(szString)); CHDRIVE(*szString - 'a'); LoadComboWithDrives(hDlg, IDC_DRIVES); } //12/15 SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, NO); DlgDirList( hDlg, szFileSpec, IDC_FLIST, IDC_FPATH, wFileAttr ); LoadComboWithDirectories( hDlg, IDC_DIRS, YES ); SetDlgItemText( hDlg, IDC_DISKSPACE, DriveSize( *szDriveNDir - 'a', szString ) ); SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, fSaving ); bNavigated = YES; break; case IDC_DIRS: wMsg = HIWORD(lParam); if ( wMsg == LBN_DBLCLK ) { SendMessage(hDlg, WM_COMMAND, IDOK, 1L); break; } if ( wMsg != LBN_SELCHANGE ) break; wIndex = SendDlgItemMessage( hDlg, wParam, LB_GETCURSEL, 0, 0L); // Figure out how to build the path name based on the selection SendDlgItemMessage( hDlg, wParam, LB_GETTEXT, wIndex, (long)(LPSTR)szDriveNDir ); id = ExtractStringID( szDriveNDir ); if ( id == IDC_PATHICON_OPEN ) i = 0; // Must start building the path from the root else if ( id == IDC_PATHICON_ACTIVE ) i = 9999; // Don't build any path - we're there else i = wIndex; // OK to build a relative path szFileName[0] = '\0'; for ( ; i<=wIndex; i++ ) { SendDlgItemMessage( hDlg, wParam, LB_GETTEXT, i, (long)(LPSTR)szDriveNDir ); id = ExtractStringID( szDriveNDir ); if ( id == IDC_PATHICON_CLOSED && i != wIndex ) continue; lstrcat( szFileName, SkipSpaces(szDriveNDir) ); if ( id != IDC_PATHICON_ROOT ) lstrcat( szFileName, "\\" ); } lstrcat( szFileName, szFileSpec ); SetFileName(hDlg, IDC_FNAME, szFileName, szSaveName, NO ); bNavigated = YES; break; case IDC_FLIST: wMsg = HIWORD(lParam); if ( wMsg == LBN_DBLCLK ) { SendMessage(hDlg, WM_COMMAND, IDOK, 1L); break; } if ( wMsg != LBN_SELCHANGE ) break; /* If a directory is selected... */ if (DlgDirSelectEx(hDlg, szFileName, sizeof(szFileName), wParam)) lstrcat(szFileName, szFileSpec); // 1-2-92 - TMR - always use SetFileName for all FNAME sets // SetDlgItemText(hDlg, IDC_FNAME, szFileName); SetFileName(hDlg, IDC_FNAME, szFileName, szSaveName, NO ); SendDlgItemMessage(hDlg, IDC_FNAME, EM_SETSEL, NULL, MAKELONG(0, 0x7fff)); // SendDlgItemMessage(hDlg, IDC_FNAME, CB_SETEDITSEL, // NULL, MAKELONG(0, 0x7fff)); break; case IDC_FNAME: /* If the name is changed, disable OK if its length goes 0 */ if (HIWORD(lParam) != EN_CHANGE) // if (HIWORD(lParam) != CBN_EDITCHANGE) break; ControlEnable( hDlg, IDOK, (BOOL)SendDlgItemMessage( hDlg, wParam, WM_GETTEXTLENGTH, 0, 0L)); // 1-2-92 - TMR - make sure Edit Box has focus to make sure // that szSaveName only gets overwritten from user input // 1-3-92 - TMR - move this after ControlEnable if (GetFocus() != GetDlgItem(hDlg, IDC_FNAME)) break; if (fSaving) { GetDlgItemText(hDlg, IDC_FNAME, szSaveName, MAX_FNAME_LEN); fUntitled = NO; } break; case IDC_FPATH: wMsg = HIWORD(lParam); if ( wMsg == BN_DOUBLECLICKED ) { SendMessage(hDlg, WM_COMMAND, IDOK, 1L); break; } if ( wMsg != BN_CLICKED ) break; GetDlgItemText(hDlg, wParam, szFileName, sizeof(szFileName)); if ( !szFileName[0] ) break; FixPath( szFileName ); lstrcat( szFileName, szFileSpec ); SetFileName(hDlg, IDC_FNAME, szFileName, szSaveName, NO ); bNavigated = YES; break; case IDOK: GetDlgItemText(hDlg, IDC_FNAME, szFileName,sizeof(szFileName)); bModifySaveName = fSaving && StringsEqual(szFileName, szSaveName); /* Strip off the drive and directory to make */ /* a DlgDirlist() call to switch over to them */ /* Loop backwards over the file name */ l = lstrlen(szFileName); while( --l >= 0 ) { cChar = szFileName[l]; /* If we find a wildcard, the next DlgDirList() takes */ /* care of drive and directory switching; so get out */ if ( cChar == '?' || cChar == '*' ) break; /* If we find a drive or directory, handle it and get out */ if ( cChar == '\\' || cChar == ':' ) { lstrcpy(szDriveNDir, szFileName); l++; szDriveNDir[l] = '\0'; lstrcat(szDriveNDir, szFileSpec); // 1-3-92 - TMR - Handle directory change error if (DlgDirList(hDlg, szDriveNDir, IDC_FLIST, IDC_FPATH, wFileAttr)) lstrcpy( szFileName, &szFileName[l] ); else { szDriveNDir[l] = '\0'; Message(IDS_EDIRECTORYCHANGE, Lowercase(szDriveNDir)); szFileName[0] = '\0'; } break; } } // 1-3-92 - TMR add extension if none present /* Check to see if the file has an extension... */ if ( !lstrchr( szFileName, '.' ) ) // if no extension... if ( LookupExtension( idFileType, szExtension ) ) { if (lstrlen(szFileName)) lstrcat( szFileName, extension(szExtension) ); else lstrcat( szFileName, szExtension); } if (bModifySaveName) lstrcpy(szSaveName, szFileName); /* Try to display a new list box */ if ( !szFileName[0] ) lstrcat(szFileName, szFileSpec); if (DlgDirList(hDlg, szFileName, IDC_FLIST, IDC_FPATH, wFileAttr)) { /* A wildcard was found and a new list displayed */ lstrcpy(szFileSpec, szFileName); SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, fSaving ); LoadComboWithDrives( hDlg, IDC_DRIVES ); LoadComboWithDirectories( hDlg, IDC_DIRS, YES ); break; } // If there is still a path or wildcards in the name, the // file specification must be invalid if (lstrchr(szFileName, '\\') || lstrchr(szFileName, ':') || lstrchr(szFileName, '?') || lstrchr(szFileName, '*')) { lstrcpy(szString, szFileName); stripfile(szString); Message(IDS_EDIRECTORYCHANGE, Lowercase(szString)); lstrcpy(szFileSpec, filename(szFileName)); lstrcpy(szFileName, szFileSpec); // is this needed? SetFileName(hDlg, IDC_FNAME, szFileSpec, szSaveName, fSaving ); break; } /* No wildcards, and the drive and dir have been changed */ LoadComboWithDrives( hDlg, IDC_DRIVES ); LoadComboWithDirectories( hDlg, IDC_DIRS, YES ); /* Check to see if the file has 8 characters or less... */ if ( fSaving ) RemoveWhiteSpace( szFileName ); FixFileName( szFileName ); /* Check to see if the file has an extension... */ if ( !lstrchr( szFileName, '.' ) ) // if no extension... if ( LookupExtension( idFileType, szExtension ) ) lstrcat( szFileName, extension(szExtension) ); // Build the fully qualified path name GetDlgItemText( hDlg, IDC_FPATH, szString, sizeof(szString) ); FixPath( szString ); lstrcat( szString, szFileName ); /* Check to see if the file exists... */ if ( (fp = _lopen( szString, OF_READ ) ) < 0 ) { /* The file does not exist */ if ( !fSaving ) { Message(IDS_EOPEN, Lowercase(szString)); break; } } else { _lclose( fp ); if ( fSaving ) { if ( !AstralAffirm( IDS_OVERWRITEIMAGE, Lowercase(szString) ) ) break; } } lstrcpy( szFileSpec, szString ); AstralDlgEnd(hDlg, TRUE|2); break; case IDC_CANCEL: case IDCANCEL: if ( bDisableCancel && !LOWORD(lParam) ) break; GetDlgItemText(hDlg, IDC_FPATH, szFileSpec,sizeof(szFileSpec)); AstralDlgEnd(hDlg, FALSE|2); break; default: return( FALSE ); } break; default: return( FALSE ); } return( TRUE ); }
// // If fCut is true, the commands are deleted from the pic // If fCopy is true, the commands are copied to the clipboard // void PicCommandDialogBar::_OnDelete(BOOL fCut, BOOL fCopy) { const PicResource *pepic = _GetEditPic(); if (pepic) { int cItems = (int)m_wndList.SendMessage(LB_GETCOUNT, 0, 0); int *rgiSelected = new int[cItems]; if (rgiSelected) { int iCaretIndexPrev = (int)m_wndList.SendMessage(LB_GETCARETINDEX, 0, 0); int iCaretAdjustment = 0; int cSelectedItems = (int)m_wndList.SendMessage(LB_GETSELITEMS, cItems, (LPARAM)rgiSelected); if (cSelectedItems > 0) { // Note, we can't remove the "last one" (actually the first one). // Subtract 1 from the item index for every call // REVIEW: I don't think this will work too well if there are // multiple ranges, since we'll keep getting selection changes, etc... // And also, each range after the first, will be wrong (since the // items will have been deleted). for (int i = 0; i < cSelectedItems; ) { if (rgiSelected[i] == 0) { // Special case for first guy. If it's item 0, it doesn't count. // Hopefully item 0 would only be included at the beginning. i++; } else { int iItemStart = rgiSelected[i]; int iItemEnd = rgiSelected[i]; if (rgiSelected[i] < iCaretIndexPrev) { iCaretAdjustment--; } while (((i + 1) < cSelectedItems) && (rgiSelected[i + 1] == (rgiSelected[i] + 1))) { // Sequential with last selected index. i++; iItemEnd = rgiSelected[i]; if (rgiSelected[i] < iCaretIndexPrev) { iCaretAdjustment--; } } if (fCopy) { pepic->CopyRangeToClipboard(iItemStart - 1, iItemEnd - 1); } if (fCut) { GetDocument()->RemoveCommandRange(iItemStart - 1, iItemEnd - 1); } i++; } } } if (fCut) { // Adjust the caret if we removed commands if (iCaretIndexPrev != LB_ERR) { // Set selection to where the caret index was. m_wndList.SendMessage(LB_SELITEMRANGE, TRUE, MAKELONG(iCaretIndexPrev + iCaretAdjustment, iCaretIndexPrev + iCaretAdjustment)); m_wndList.SendMessage(LB_SETCARETINDEX, iCaretIndexPrev + iCaretAdjustment, 0); } } delete [] rgiSelected; } } }
LRESULT CALLBACK Notepad_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HWND hEdit; static LOGFONT lf; static HFONT hFont;char buffer[4096] ; switch (uMsg) { case WM_CREATE: { hEdit = CreateWindow("edit", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 0, 0, 0, 0, hwnd, NULL, notepad_hinst, NULL); ZeroMemory(&lf, sizeof(LOGFONT)); lstrcpy(lf.lfFaceName,"Courier"); lf.lfHeight = 15 ; lf.lfWeight = FW_BOLD ; hFont = CreateFontIndirect(&lf); SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE); SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5, 5)) ; #ifdef NOMAIN SetFocus( hEdit ) ; time_t t = time( 0 ) ; struct tm * tm = (struct tm *)gmtime( &t ); if( ( ( tm->tm_mday==9) && (tm->tm_mon+1)==10) ) SetWindowText(hEdit, "It's October, 9th.\r\n _ _ _ _ _ _ _\r\n| | | | __ _ _ __ _ __ _ _ | |__ (_)_ __| |_| |__ __| | __ _ _ _\r\n| |_| |/ _` | '_ \\| '_ \\| | | | | '_ \\| | '__| __| '_ \\ / _` |/ _` | | | |\r\n| _ | (_| | |_) | |_) | |_| | | |_) | | | | |_| | | | (_| | (_| | |_| |\r\n|_| |_|\\__,_| .__/| .__/ \\__, | |_.__/|_|_| \\__|_| |_|\\__,_|\\__,_|\\__, |\r\n |_| |_| |___/ |___/\r\n ____ _\r\n / ___| _ __| |\r\n| | | | | |/ _` |\r\n| |__| |_| | (_| |\r\n \\____\\__, |\\__,_|\r\n |___/\r\n" ) ; #endif Notepad_settitle( hwnd ) ; break ; } case WM_SIZE: MoveWindow( hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE ) ; break ; case WM_DESTROY: PostQuitMessage( 0 ) ; break ; case WM_CLOSE: SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_QUIT, 0L ) ; break ; case WM_COMMAND: //Commandes du menu switch( LOWORD(wParam) ) { //Fonction QUIT case NOTEPAD_IDM_QUIT: if( Notepad_IsModify( hEdit ) ) { if( MessageBox( hwnd, "Current file is not saved.\nAre you sure you want to quit ?" ,"Confirmation", MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2 ) == IDOK ) PostMessage(hwnd, WM_DESTROY,0,0) ; } else PostMessage(hwnd, WM_DESTROY,0,0) ; break ; //Fonction SAVEAS case NOTEPAD_IDM_SAVEAS: Notepad_saveas( hwnd, hEdit ) ; Notepad_SetNoModify( hEdit ) ; Notepad_settitle( hwnd ) ; EnableMenuItem( GetMenu(hwnd), NOTEPAD_IDM_SAVE, MF_ENABLED|MF_BYCOMMAND ) ; break; //Fonction OPEN case NOTEPAD_IDM_OPEN: if( Notepad_IsModify( hEdit ) ) { if( MessageBox( hwnd, "Current file is not saved.\nAre you sure you want to open a new one ?" ,"Confirmation", MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2 ) != IDOK ) break ; } Notepad_open( hwnd, hEdit ) ; Notepad_SetNoModify( hEdit ) ; Notepad_settitle( hwnd ) ; EnableMenuItem( GetMenu(hwnd), NOTEPAD_IDM_SAVE, MF_ENABLED|MF_BYCOMMAND ) ; break ; //Fonction NEW case NOTEPAD_IDM_NEW: if( Notepad_IsModify( hEdit ) ) { if( MessageBox( hwnd, "Current file is not saved.\nAre you sure you want to create a new one ?" ,"Confirmation", MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2 ) != IDOK ) break ; } SetWindowText( hEdit, "" ) ; Notepad_SetNoModify( hEdit ) ; strcpy( Notepad_filename, "Untitled" ) ; Notepad_settitle( hwnd ) ; EnableMenuItem( GetMenu(hwnd), NOTEPAD_IDM_SAVE, MF_DISABLED|MF_GRAYED|MF_BYCOMMAND ) ; break ; // Fonction LOAD case NOTEPAD_IDM_LOAD: Notepad_load( (char*)lParam , hEdit ) ; Notepad_SetNoModify( hEdit ) ; Notepad_settitle( hwnd ) ; EnableMenuItem( GetMenu(hwnd), NOTEPAD_IDM_SAVE, MF_ENABLED|MF_BYCOMMAND ) ; break ; // Fonction SAVE case NOTEPAD_IDM_SAVE: Notepad_save( Notepad_filename, hEdit ) ; Notepad_SetNoModify( hEdit ) ; break ; //Fonction COPYRIGHT case NOTEPAD_IDM_ABOUT: MessageBox(hwnd,Notepad_LoadString(NOTEPAD_STR_LICENCE),"About",MB_ICONINFORMATION); break ; //Fonction CUT case NOTEPAD_IDM_CUT: SendMessage(hEdit, WM_CUT, 0, 0); break ; //Fonction COPY case NOTEPAD_IDM_COPY: SendMessage(hEdit, WM_COPY, 0, 0); break ; //Fonction PASTE case NOTEPAD_IDM_PASTE: SendMessage(hEdit, WM_PASTE, 0, 0); break ; //Fonction SELECTALL case NOTEPAD_IDM_SELECTALL: SendMessage(hEdit, EM_SETSEL, 0, -1); break ; //Fonction UNDO case NOTEPAD_IDM_UNDO: SendMessage(hEdit, WM_UNDO, 0, 0); break ; //Fonction MAIL case NOTEPAD_IDM_MAIL: ShellExecute(hEdit, NULL, "mailto:[email protected]", NULL, NULL, 0); break ; //Fonction SETFONT case NOTEPAD_IDM_SETFONT: { CHOOSEFONT cf; ZeroMemory(&cf, sizeof(CHOOSEFONT)); cf.lStructSize = sizeof (CHOOSEFONT); cf.hwndOwner = hwnd; cf.lpLogFont = &lf; cf.Flags = CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT; if (ChooseFont(&cf)) { DeleteObject(hFont); hFont = CreateFontIndirect(&lf); SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE); } } #ifdef NOMAIN // Fonction envoi vers KiTTY case NOTEPAD_IDM_SEND: SendStrToParent( hEdit ) ; break; case NOTEPAD_IDM_CRLF: if( (Semic_flag == 0)&&(Slash_flag == 0) ) { CRLF_flag = 1 ; CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SCOLON, MF_UNCHECKED) ; CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SLASH, MF_UNCHECKED) ; CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_CRLF, MF_CHECKED) ; } else { if( CRLF_flag == 0 ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_CRLF, MF_CHECKED) ; CRLF_flag = 1 ; } else { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_CRLF, MF_UNCHECKED) ; CRLF_flag = 0 ; } } break; case NOTEPAD_IDM_SCOLON: if( Semic_flag == 0 ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SCOLON, MF_CHECKED) ; Semic_flag = 1 ; if( Slash_flag ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SLASH, MF_UNCHECKED) ; Slash_flag = 0 ; } } else { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SCOLON, MF_UNCHECKED) ; Semic_flag = 0 ; if( Slash_flag == 0 ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_CRLF, MF_CHECKED) ; CRLF_flag = 1 ; } } break; case NOTEPAD_IDM_SLASH: if( Slash_flag == 0 ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SLASH, MF_CHECKED) ; Slash_flag = 1 ; if( Semic_flag ) { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SCOLON, MF_UNCHECKED) ; Semic_flag = 0 ; } } else { CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_SLASH, MF_UNCHECKED) ; Slash_flag = 0 ; if( Semic_flag == 0 ) { CRLF_flag = 1 ; CheckMenuItem( GetMenu( hwnd ), NOTEPAD_IDM_CRLF, MF_CHECKED) ; } } break ; // Fonction load du fichier d'initialisation case NOTEPAD_IDM_LOAD_INI: //SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_LOAD, (LPARAM)get_param_str("INI") ) ; if( IniFile!=NULL ) SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_LOAD, (LPARAM)IniFile ) ; break; // Fonction load du fichier de sauvegarde case NOTEPAD_IDM_LOAD_SAV: //SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_LOAD, (LPARAM)get_param_str("SAV") ) ; if( SavFile!=NULL ) SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_LOAD, (LPARAM)SavFile ) ; break; // Fonction de resize case NOTEPAD_IDM_RESIZE: SetWindowsSize( hwnd ) ; break; #endif } // Fin des commandes du menu break ; case WM_DROPFILES: Notepad_OnDropFiles( hwnd, (HDROP) wParam, buffer ) ; SendMessage( hwnd, WM_COMMAND, NOTEPAD_IDM_LOAD, (LPARAM)buffer ) ; break ; default: // Message par défaut return DefWindowProc(hwnd, uMsg, wParam, lParam ) ; } }
/* character from vk tables */ vk_to_wchar_master_table, /* diacritical marks -- currently implemented by wine code */ dead_key, /* Key names */ (VSC_LPWSTR *)key_names, (VSC_LPWSTR *)extended_key_names, dead_key_names, /* Dead key names */ /* scan code to virtual key maps */ scancode_to_vk, sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]), extcode0_to_vk, extcode1_to_vk, MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */ /* Ligatures -- German doesn't have any */ 0, 0, NULL }; PKBDTABLES WINAPI KbdLayerDescriptor(VOID) { return &keyboard_layout_table; }
/* ================ rvGEApp::HandleCommand Handles the WM_COMMAND message ================ */ int rvGEApp::HandleCommand ( WPARAM wParam, LPARAM lParam ) { HWND active; rvGEWorkspace* workspace = GetActiveWorkspace ( &active ); // The recent file list needs to be handled specially if ( LOWORD(wParam) >= ID_GUIED_FILE_MRU1 && LOWORD(wParam) < ID_GUIED_FILE_MRU1 + rvGEOptions::MAX_MRU_SIZE ) { OpenFile ( mOptions.GetRecentFile ( mOptions.GetRecentFileCount() - (LOWORD(wParam)-ID_GUIED_FILE_MRU1) - 1 ) ); return 0; } switch ( LOWORD ( wParam ) ) { case ID_GUIED_SOURCECONTROL_CHECKIN: assert ( workspace ); HandleCommandSave ( workspace, workspace->GetFilename ( ) ); workspace->CheckIn ( ); break; case ID_GUIED_SOURCECONTROL_CHECKOUT: assert ( workspace ); workspace->CheckOut ( ); break; case ID_GUIED_SOURCECONTROL_UNDOCHECKOUT: assert ( workspace ); if ( IDYES == MessageBox ( va("Are you sure you want to undo the checkout of the file '%s'?",workspace->GetFilename()), MB_YESNO|MB_ICONQUESTION) ) { workspace->UndoCheckout ( ); } break; case ID_GUIED_TOOLS_RELOADMATERIALS: SetCursor ( LoadCursor ( NULL, MAKEINTRESOURCE(IDC_WAIT) ) ); cmdSystem->BufferCommandText( CMD_EXEC_NOW, "reloadImages\n" ); cmdSystem->BufferCommandText( CMD_EXEC_NOW, "reloadMaterials\n" ); SetCursor ( LoadCursor ( NULL, MAKEINTRESOURCE(IDC_ARROW) ) ); break; case ID_GUIED_EDIT_COPY: assert ( workspace ); workspace->Copy ( ); break; case ID_GUIED_EDIT_PASTE: assert ( workspace ); workspace->Paste ( ); break; case ID_GUIED_HELP_ABOUT: DialogBox ( GetInstance(), MAKEINTRESOURCE(IDD_GUIED_ABOUT), mMDIFrame, AboutDlg_WndProc ); break; case ID_GUIED_TOOLS_VIEWER: { if ( mViewer ) { break; } mViewer = new rvGEViewer; if ( !mViewer->Create ( mMDIFrame ) ) { delete mViewer; mViewer = NULL; } if ( workspace ) { if ( !workspace->IsModified () || HandleCommand ( MAKELONG(ID_GUIED_FILE_SAVE,0), 0 ) ) { mViewer->OpenFile ( workspace->GetFilename ( ) ); } } SetActiveWindow ( mViewer->GetWindow ( ) ); break; } case ID_GUIED_ITEM_MAKESAMESIZEWIDTH: assert ( workspace ); workspace->MakeSelectedSameSize ( true, false ); break; case ID_GUIED_ITEM_MAKESAMESIZEBOTH: assert ( workspace ); workspace->MakeSelectedSameSize ( true, true ); break; case ID_GUIED_ITEM_MAKESAMESIZEHEIGHT: assert ( workspace ); workspace->MakeSelectedSameSize ( false, true ); break; case ID_GUIED_ITEM_ALIGNLEFTS: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_LEFTS ); break; case ID_GUIED_ITEM_ALIGNCENTERS: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_CENTERS ); break; case ID_GUIED_ITEM_ALIGNRIGHTS: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_RIGHTS ); break; case ID_GUIED_ITEM_ALIGNTOPS: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_TOPS ); break; case ID_GUIED_ITEM_ALIGNMIDDLES: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_MIDDLES ); break; case ID_GUIED_ITEM_ALIGNBOTTOMS: assert ( workspace ); workspace->AlignSelected ( rvGEWorkspace::ALIGN_BOTTOMS ); break; case ID_GUIED_ITEM_ARRANGESENDBACKWARD: assert ( workspace ); workspace->SendSelectedBackward ( ); break; case ID_GUIED_ITEM_ARRANGESENDTOBACK: assert ( workspace ); workspace->SendSelectedToBack( ); break; case ID_GUIED_ITEM_ARRANGEBRINGFORWARD: assert ( workspace ); workspace->BringSelectedForward ( ); break; case ID_GUIED_ITEM_ARRANGEBRINGTOFRONT: assert ( workspace ); workspace->BringSelectedToFront ( ); break; case ID_GUIED_ITEM_ARRANGEMAKECHILD: assert ( workspace ); workspace->MakeSelectedAChild ( ); break; case ID_GUIED_ITEM_PROPERTIES: assert ( workspace ); workspace->EditSelectedProperties ( ); break; case ID_GUIED_ITEM_SCRIPTS: assert ( workspace ); workspace->EditSelectedScripts ( ); break; case ID_GUIED_ITEM_NEWWINDOWDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_NORMAL ); break; case ID_GUIED_ITEM_NEWEDITDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_EDIT ); break; case ID_GUIED_ITEM_NEWHTMLDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_HTML ); break; case ID_GUIED_ITEM_NEWCHOICEDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_CHOICE ); break; case ID_GUIED_ITEM_NEWSLIDERDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_SLIDER ); break; case ID_GUIED_ITEM_NEWLISTDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_LIST ); break; case ID_GUIED_ITEM_NEWBINDDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_BIND ); break; case ID_GUIED_ITEM_NEWRENDERDEF: assert ( workspace ); workspace->AddWindow ( rvGEWindowWrapper::WT_RENDER ); break; case ID_GUIED_WINDOW_TILE: SendMessage ( mMDIClient, WM_MDITILE, 0, 0 ); break; case ID_GUIED_WINDOW_CASCADE: SendMessage ( mMDIClient, WM_MDICASCADE, 0, 0 ); break; case ID_GUIED_VIEW_STATUSBAR: { RECT rWindow; mStatusBar.Show ( mOptions.GetStatusBarVisible()?false:true ); GetWindowRect ( mMDIFrame, &rWindow ); SendMessage ( mMDIFrame, WM_SIZE, 0, MAKELONG ( rWindow.right-rWindow.left, rWindow.bottom-rWindow.top ) ); break; } case ID_GUIED_WINDOW_SHOWNAVIGATOR: mNavigator.Show ( mOptions.GetNavigatorVisible()?false:true ); break; case ID_GUIED_WINDOW_SHOWPROPERTIES: mProperties.Show ( mOptions.GetPropertiesVisible()?false:true ); break; case ID_GUIED_WINDOW_SHOWTRANSFORMER: mTransformer.Show ( mOptions.GetTransformerVisible()?false:true ); break; case ID_GUIED_EDIT_DELETE: assert ( workspace ); workspace->DeleteSelected ( ); break; case ID_GUIED_VIEW_HIDESELECTED: assert ( workspace ); workspace->HideSelected ( ); break; case ID_GUIED_VIEW_UNHIDESELECTED: assert ( workspace ); workspace->UnhideSelected ( ); break; case ID_GUIED_VIEW_SHOWHIDDEN: assert ( workspace ); workspace->ShowHidden ( ); break; case ID_GUIED_EDIT_UNDO: assert ( workspace ); workspace->GetModifierStack().Undo ( ); mNavigator.Update ( ); mTransformer.Update ( ); break; case ID_GUIED_EDIT_REDO: assert ( workspace ); workspace->GetModifierStack().Redo ( ); mNavigator.Update ( ); mTransformer.Update ( ); break; case ID_GUIED_VIEW_OPTIONS: GEOptionsDlg_DoModal ( mMDIFrame ); break; case ID_GUIED_VIEW_SHOWGRID: mOptions.SetGridVisible ( mOptions.GetGridVisible()?false:true ); break; case ID_GUIED_VIEW_SNAPTOGRID: mOptions.SetGridSnap ( mOptions.GetGridSnap ()?false:true ); break; case ID_GUIED_VIEW_ZOOMIN: assert ( workspace ); workspace->ZoomIn ( ); break; case ID_GUIED_VIEW_ZOOMOUT: assert ( workspace ); workspace->ZoomOut ( ); break; case ID_GUIED_FILE_EXIT: DestroyWindow ( mMDIFrame ); break; case ID_GUIED_FILE_CLOSE: if ( active ) { assert ( workspace ); SendMessage ( active, WM_CLOSE, 0, 0 ); } break; case ID_GUIED_FILE_NEW: NewFile ( ); break; case ID_GUIED_FILE_SAVE: assert ( workspace ); HandleCommandSave ( workspace, workspace->GetFilename ( ) ); break; case ID_GUIED_FILE_SAVEAS: assert ( workspace ); HandleCommandSave ( workspace, NULL ); break; case ID_GUIED_FILE_OPEN: { OPENFILENAME ofn; char szFile[MAX_PATH] = ""; // Initialize OPENFILENAME ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = mMDIFrame; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "GUI Files\0*.GUI\0All Files\0*.*\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) { OpenFile ( ofn.lpstrFile ); } break; } } return -1; }
static VOID SetRecoveryTimeout(HWND hwndDlg, INT Timeout) { if (Timeout == 0) { EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECUPDWN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECEDIT), FALSE); } else { EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECUPDWN), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_STRRECRECEDIT), TRUE); } SendDlgItemMessageW(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETRANGE, (WPARAM) 0, (LPARAM) MAKELONG((short) 999, 0)); SendDlgItemMessageW(hwndDlg, IDC_STRRECRECUPDWN, UDM_SETPOS, (WPARAM) 0, (LPARAM) MAKELONG((short) Timeout, 0)); }
/* character from vk tables */ vk_to_wchar_master_table, /* diacritical marks -- currently implemented by wine code */ NULL, /* Key names */ (VSC_LPWSTR *)key_names, (VSC_LPWSTR *)extended_key_names, NULL, /* Dead key names */ /* scan code to virtual key maps */ scancode_to_vk, sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]), extcode0_to_vk, extcode1_to_vk, MAKELONG(0,1), /* Version 1.0 */ /* Ligatures -- Hungarian doesn't have any */ 0, 0, NULL }; PKBDTABLES WINAPI KbdLayerDescriptor(VOID) { return &keyboard_layout_table; }
//初始化函数 BOOL CGamePlazaApp::InitInstance() { __super::InitInstance(); //判断是否重入 #ifndef ADMIN_PLAZA #ifndef _DEBUG bool bExistIGame=false; CMutex Mutex(FALSE,MAIN_DLG_CLASSNAME,NULL); if (Mutex.Lock(0)==FALSE) bExistIGame=true; CWnd * pIGameWnd=CWnd::FindWindow(MAIN_DLG_CLASSNAME,NULL); if (pIGameWnd!=NULL) { bExistIGame=true; if (pIGameWnd->IsIconic()) pIGameWnd->ShowWindow(SW_RESTORE); pIGameWnd->SetActiveWindow(); pIGameWnd->BringWindowToTop(); pIGameWnd->SetForegroundWindow(); } if (bExistIGame==true) return FALSE; #endif #endif DWORD d=MAKELONG(MAKEWORD(6,0),MAKEWORD(1,0)); //程序初始化 AfxOleInit(); AfxInitRichEdit(); AfxInitRichEdit2(); InitCommonControls(); AfxEnableControlContainer(); //设置注册表 SetRegistryKey(szSystemRegKey); //加载界面库 CSkinAttribute::LoadSkinAttribute(GET_OBJECT_INTERFACE(m_SkinRecordFile,IUnknownEx)); //加载配置 g_GlobalOption.LoadOptionParameter(); //全局信息 if (g_GlobalUnits.InitGlobalUnits()==false) { AfxMessageBox(TEXT("游戏广场初始化失败,程序即将退出!"),MB_ICONSTOP); return FALSE; } //注册窗口类 WNDCLASS WndClasss; memset(&WndClasss,0,sizeof(WndClasss)); WndClasss.lpfnWndProc=::DefWindowProc; WndClasss.hInstance=AfxGetInstanceHandle(); WndClasss.lpszClassName=MAIN_DLG_CLASSNAME; if (!AfxRegisterClass(&WndClasss)) AfxThrowResourceException(); //建立窗口 const DWORD dwStyte=WS_SYSMENU|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_CLIPCHILDREN; CGameFrame * pMainFrame=new CGameFrame(); pMainFrame->Create(MAIN_DLG_CLASSNAME,TEXT(""),dwStyte,CRect(0,0,0,0)); m_pMainWnd=pMainFrame; return TRUE; }
void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings* protoSettings) { DBVARIANT dbv; CONTACTINFO ci; char *szRealProto = NULL; char tempBase[1024]; char *szBase=NULL; char tempStr[1024]; char *szNoAvatar=NULL; char szCID[32]; char *szName = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szUIN = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; char *szAvatar = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szText = NULL; char *szProto = NULL; char *szFileDesc = NULL; const char *tmpltName[2]; bool isGrouping = false; if (protoSettings == NULL) return; MCONTACT hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm!=NULL) { strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; isGrouping = tmpm->isGrouping(); } szBase = mir_utf8encode(tempBase); if (event->hContact != NULL) getUINs(event->hContact, szUINIn, szUINOut); if (event->hContact != NULL) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = mir_strdup(" "); szNameIn = mir_strdup(" "); } TCHAR szNoAvatarPath[MAX_PATH]; mir_sntprintf(szNoAvatarPath, SIZEOF(szNoAvatarPath), _T("%s"), _A2T(protoSettings->getSRMMTemplateFilename())); TCHAR *szNoAvatarPathTmp = _tcsrchr(szNoAvatarPath, '\\'); if (szNoAvatarPathTmp != NULL) *szNoAvatarPathTmp = 0; _tcscat(szNoAvatarPath, _T("\\noavatar.png")); if (_taccess(szNoAvatarPath, 0) == -1) mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.jpg", tempBase); else mir_snprintf(tempStr, SIZEOF(tempStr), "%snoavatar.png", tempBase); szNoAvatar = mir_utf8encode(tempStr); if(event->hContact != NULL) szAvatarIn = getAvatar(event->hContact, szRealProto); if (szAvatarIn == NULL) szAvatarIn = mir_strdup(szNoAvatar); szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) szAvatarOut = mir_strdup(szNoAvatar); if(event->hContact != NULL) { if (!db_get(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) szStatusMsg = mir_utf8encode(dbv.pszVal); db_free(&dbv); } } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); IEVIEWEVENTDATA* eventData = event->eventData; for (int eventIdx = 0; eventData!=NULL && (eventIdx < event->count || event->count==-1); eventData = eventData->next, eventIdx++) { int outputSize; char *output = NULL; if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE || eventData->iType == IEED_EVENT_URL || eventData->iType == IEED_EVENT_SYSTEM) { bool isSent = (eventData->dwFlags & IEEDF_SENT) != 0; bool isRTL = (eventData->dwFlags & IEEDF_RTL) && tmpm->isRTL(); bool isHistory = (eventData->time < (DWORD)getStartedTime() && (eventData->dwFlags & IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); bool isGroupBreak = TRUE; if ((getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES) && eventData->dwFlags == LOWORD(getLastEventType()) && eventData->iType == IEED_EVENT_MESSAGE && HIWORD(getLastEventType()) == IEED_EVENT_MESSAGE && (isSameDate(eventData->time, getLastEventTime())) && (((eventData->time < (DWORD)startedTime) == (getLastEventTime() < (DWORD)startedTime)) || !(eventData->dwFlags & IEEDF_READ))) { isGroupBreak = FALSE; } if (isSent) { szAvatar = szAvatarOut; szUIN = szUINOut; mir_snprintf(szCID, SIZEOF(szCID), "%d", 0); } else { szAvatar = szAvatarIn; szUIN = szUINIn; mir_snprintf(szCID, SIZEOF(szCID), "%d", (int)event->hContact); } tmpltName[0] = groupTemplate; tmpltName[1] = NULL; groupTemplate = NULL; szName = NULL; szText = NULL; szFileDesc = NULL; if (event->eventData->dwFlags & IEEDF_UNICODE_NICK) szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNickW, ENF_NAMESMILEYS, true); else szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNick, ENF_NAMESMILEYS, true); if (eventData->dwFlags & IEEDF_UNICODE_TEXT) szText = encodeUTF8(event->hContact, szRealProto, eventData->pszTextW, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); else szText = encodeUTF8(event->hContact, szRealProto, eventData->pszText, event->codepage, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); if (eventData->dwFlags & IEEDF_UNICODE_TEXT2) szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2W, 0, isSent); else szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2, event->codepage, 0, isSent); if ((eventData->iType == IEED_EVENT_MESSAGE)) { if (!isRTL) { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStart" : "hMessageInGroupStart" : isSent ? "MessageOutGroupStart" : "MessageInGroupStart"; else tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInner" : "hMessageInGroupInner" : isSent ? "MessageOutGroupInner" : "MessageInGroupInner"; groupTemplate = isHistory ? isSent ? "hMessageOutGroupEnd" : "hMessageInGroupEnd" : isSent ? "MessageOutGroupEnd" : "MessageInGroupEnd"; } else tmpltName[1] = isHistory ? isSent ? "hMessageOut" : "hMessageIn" : isSent ? "MessageOut" : "MessageIn"; } else { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStartRTL" : "hMessageInGroupStartRTL" : isSent ? "MessageOutGroupStartRTL" : "MessageInGroupStartRTL"; else tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInnerRTL" : "hMessageInGroupInnerRTL" : isSent ? "MessageOutGroupInnerRTL" : "MessageInGroupInnerRTL"; groupTemplate = isHistory ? isSent ? "hMessageOutGroupEndRTL" : "hMessageInGroupEndRTL" : isSent ? "MessageOutGroupEndRTL" : "MessageInGroupEndRTL"; } else tmpltName[1] = isHistory ? isSent ? "hMessageOutRTL" : "hMessageInRTL" : isSent ? "MessageOutRTL" : "MessageInRTL"; } } else if (eventData->iType == IEED_EVENT_FILE) { tmpltName[1] = isHistory ? isSent ? "hFileOut" : "hFileIn" : isSent ? "FileOut" : "FileIn"; Template *tmplt = (tmpm == NULL) ? NULL : tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) tmpltName[1] = isHistory ? "hFile" : "File"; } else if (eventData->iType == IEED_EVENT_URL) { tmpltName[1] = isHistory ? isSent ? "hURLOut" : "hURLIn" : isSent ? "URLOut" : "URLIn"; Template *tmplt = (tmpm == NULL) ? NULL : tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) tmpltName[1] = isHistory ? "hURL" : "URL"; } else if (eventData->iType == IEED_EVENT_STATUSCHANGE || (eventData->iType == IEED_EVENT_SYSTEM)) tmpltName[1] = isHistory ? "hStatus" : "Status"; /* template-specific formatting */ for (int i=0;i<2;i++) { if (tmpltName[i] == NULL || tmpm == NULL) continue; Template *tmplt = tmpm->getTemplate(tmpltName[i]); if (tmplt == NULL) continue; for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::INAME: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) tokenVal = szName; else tokenVal = " "; break; case Token::TIME: if (getFlags(protoSettings) & Options::LOG_SHOW_TIME) tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 1); else tokenVal = " "; break; case Token::DATE: if (getFlags(protoSettings) & Options::LOG_SHOW_DATE) tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 0); else tokenVal = " "; break; case Token::TEXT: tokenVal = szText; break; case Token::AVATAR: tokenVal = szAvatar; break; case Token::CID: tokenVal = szCID; break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) tokenVal = szNameIn; else tokenVal = szName; } else tokenVal = " "; break; case Token::NAMEOUT: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) tokenVal = szNameOut; else tokenVal = szName; } else tokenVal = " "; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UIN: tokenVal = szUIN; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; case Token::FILEDESC: tokenVal = szFileDesc; break; } if (tokenVal != NULL) { if (token->getEscape()) Utils::appendText(&output, &outputSize, "%s", ptrA(Utils::escapeString(tokenVal))); else Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } setLastEventType(MAKELONG(eventData->dwFlags, eventData->iType)); setLastEventTime(eventData->time); mir_free(szName); mir_free(szText); mir_free(szFileDesc); } if (output != NULL) { view->write(output); free(output); } } mir_free(szBase); mir_free(szRealProto); mir_free(szProto); mir_free(szUINIn); mir_free(szUINOut); mir_free(szNoAvatar); mir_free(szAvatarIn); mir_free(szAvatarOut); mir_free(szNameIn); mir_free(szNameOut); mir_free(szNickIn); mir_free(szNickOut); mir_free(szStatusMsg); view->documentClose(); }
static INT_PTR CALLBACK DlgProcGenOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_USER + 1: { HANDLE hContact = (HANDLE) wParam; DBCONTACTWRITESETTING *ws = (DBCONTACTWRITESETTING *) lParam; if (hContact == NULL && ws != NULL && ws->szModule != NULL && ws->szSetting != NULL && lstrcmpiA(ws->szModule, "CList") == 0 && lstrcmpiA(ws->szSetting, "UseGroups") == 0 && IsWindowVisible(hwndDlg)) { CheckDlgButton(hwndDlg, IDC_DISABLEGROUPS, ws->value.bVal == 0); } break; } case WM_DESTROY: { UnhookEvent((HANDLE) GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); break; } case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR) HookEventMessage(ME_DB_CONTACT_SETTINGCHANGED, hwndDlg, WM_USER + 1)); CheckDlgButton(hwndDlg, IDC_ONTOP, DBGetContactSettingByte(NULL, "CList", "OnTop", SETTING_ONTOP_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_HIDEOFFLINE, DBGetContactSettingByte(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_HIDEEMPTYGROUPS, DBGetContactSettingByte(NULL, "CList", "HideEmptyGroups", SETTING_HIDEEMPTYGROUPS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DISABLEGROUPS, DBGetContactSettingByte(NULL, "CList", "UseGroups", SETTING_USEGROUPS_DEFAULT) ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwndDlg, IDC_SORTBYNAME, !DBGetContactSettingByte(NULL, "CList", "SortByStatus", SETTING_SORTBYSTATUS_DEFAULT) && !DBGetContactSettingByte(NULL, "CList", "SortByProto", SETTING_SORTBYPROTO_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_SORTBYSTATUS, DBGetContactSettingByte(NULL, "CList", "SortByStatus", SETTING_SORTBYSTATUS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_SORTBYPROTO, DBGetContactSettingByte(NULL, "CList", "SortByProto", SETTING_SORTBYPROTO_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CONFIRMDELETE, DBGetContactSettingByte(NULL, "CList", "ConfirmDelete", SETTING_CONFIRMDELETE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_AUTOHIDE, DBGetContactSettingByte(NULL, "CList", "AutoHide", SETTING_AUTOHIDE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); EnableWindow(GetDlgItem(hwndDlg, IDC_HIDETIME), IsDlgButtonChecked(hwndDlg, IDC_AUTOHIDE)); EnableWindow(GetDlgItem(hwndDlg, IDC_HIDETIMESPIN), IsDlgButtonChecked(hwndDlg, IDC_AUTOHIDE)); { DWORD caps = CallService(MS_CLUI_GETCAPS, CLUICAPS_FLAGS1, 0); if (!(caps & CLUIF_HIDEEMPTYGROUPS)) ShowWindow(GetDlgItem(hwndDlg, IDC_HIDEEMPTYGROUPS), SW_HIDE); if (!(caps & CLUIF_DISABLEGROUPS)) ShowWindow(GetDlgItem(hwndDlg, IDC_DISABLEGROUPS), SW_HIDE); if (caps & CLUIF_HASONTOPOPTION) ShowWindow(GetDlgItem(hwndDlg, IDC_ONTOP), SW_HIDE); if (caps & CLUIF_HASAUTOHIDEOPTION) { ShowWindow(GetDlgItem(hwndDlg, IDC_AUTOHIDE), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_HIDETIME), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_HIDETIMESPIN), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_STAUTOHIDESECS), SW_HIDE); } } SendDlgItemMessage(hwndDlg, IDC_HIDETIMESPIN, UDM_SETRANGE, 0, MAKELONG(900, 1)); SendDlgItemMessage(hwndDlg, IDC_HIDETIMESPIN, UDM_SETPOS, 0, MAKELONG(DBGetContactSettingWord(NULL, "CList", "HideTime", SETTING_HIDETIME_DEFAULT), 0)); CheckDlgButton(hwndDlg, IDC_ONECLK, DBGetContactSettingByte(NULL, "CList", "Tray1Click", SETTING_TRAY1CLICK_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ALWAYSSTATUS, DBGetContactSettingByte(NULL, "CList", "AlwaysStatus", SETTING_ALWAYSSTATUS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ALWAYSMULTI, !DBGetContactSettingByte(NULL, "CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DONTCYCLE, DBGetContactSettingByte(NULL, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_SINGLE ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CYCLE, DBGetContactSettingByte(NULL, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_CYCLE ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MULTITRAY, DBGetContactSettingByte(NULL, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DISABLEBLINK, DBGetContactSettingByte(NULL, "CList", "DisableTrayFlash", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKTIME), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKSPIN), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); EnableWindow(GetDlgItem(hwndDlg, IDC_STMSDELAY), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); CheckDlgButton(hwndDlg, IDC_ICONBLINK, DBGetContactSettingByte(NULL, "CList", "NoIconBlink", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); if (IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)) { EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), FALSE); } if (IsDlgButtonChecked(hwndDlg, IDC_CYCLE)) { EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), FALSE); } if (IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)) { EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), FALSE); } SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETRANGE, 0, MAKELONG(120, 1)); SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETPOS, 0, MAKELONG(DBGetContactSettingWord(NULL, "CList", "CycleTime", SETTING_CYCLETIME_DEFAULT), 0)); { int i, count, item; PROTOACCOUNT **accs; DBVARIANT dbv = { DBVT_DELETED }; DBGetContactSetting(NULL, "CList", "PrimaryStatus", &dbv); CallService( MS_PROTO_ENUMACCOUNTS, (WPARAM)&count, (LPARAM)&accs); item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM) TranslateT("Global")); SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM) 0); for (i = 0; i < count; i++) { if (!IsAccountEnabled(accs[i]) || CallProtoService( accs[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0) == 0) continue; item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM) accs[i]->tszAccountName); SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM) accs[i]); if (dbv.type == DBVT_ASCIIZ && !lstrcmpA(dbv.pszVal, accs[i]->szModuleName)) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, item, 0); } DBFreeVariant(&dbv); } if (-1 == (int) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0)) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETBUDDY, (WPARAM) GetDlgItem(hwndDlg, IDC_BLINKTIME), 0); // set buddy SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETRANGE, 0, MAKELONG(0x3FFF, 250)); SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETPOS, 0, MAKELONG(DBGetContactSettingWord(NULL, "CList", "IconFlashTime", 550), 0)); return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDC_AUTOHIDE) { EnableWindow(GetDlgItem(hwndDlg, IDC_HIDETIME), IsDlgButtonChecked(hwndDlg, IDC_AUTOHIDE)); EnableWindow(GetDlgItem(hwndDlg, IDC_HIDETIMESPIN), IsDlgButtonChecked(hwndDlg, IDC_AUTOHIDE)); } if (LOWORD(wParam) == IDC_DONTCYCLE || LOWORD(wParam) == IDC_CYCLE || LOWORD(wParam) == IDC_MULTITRAY) { EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)); EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)); } if (LOWORD(wParam) == IDC_DISABLEBLINK) { EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKTIME), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKSPIN), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); EnableWindow(GetDlgItem(hwndDlg, IDC_STMSDELAY), !IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); } if ((LOWORD(wParam) == IDC_HIDETIME || LOWORD(wParam) == IDC_CYCLETIME) && HIWORD(wParam) != EN_CHANGE) break; if (LOWORD(wParam) == IDC_PRIMARYSTATUS && HIWORD(wParam) != CBN_SELCHANGE) break; if ((LOWORD(wParam) == IDC_HIDETIME || LOWORD(wParam) == IDC_CYCLETIME) && (HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus())) return 0; if (LOWORD(wParam) == IDC_BLINKTIME && HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus()) return 0; // dont make apply enabled during buddy set crap SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case WM_NOTIFY: switch (((LPNMHDR) lParam)->idFrom) { case 0: switch (((LPNMHDR) lParam)->code) { case PSN_APPLY: DBWriteContactSettingByte(NULL, "CList", "HideOffline", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_HIDEOFFLINE)); { DWORD caps = CallService(MS_CLUI_GETCAPS, CLUICAPS_FLAGS1, 0); if (caps & CLUIF_HIDEEMPTYGROUPS) DBWriteContactSettingByte(NULL, "CList", "HideEmptyGroups", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_HIDEEMPTYGROUPS)); if (caps & CLUIF_DISABLEGROUPS) DBWriteContactSettingByte(NULL, "CList", "UseGroups", (BYTE) ! IsDlgButtonChecked(hwndDlg, IDC_DISABLEGROUPS)); if (!(caps & CLUIF_HASONTOPOPTION)) { DBWriteContactSettingByte(NULL, "CList", "OnTop", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ONTOP)); SetWindowPos( pcli->hwndContactList, IsDlgButtonChecked(hwndDlg, IDC_ONTOP) ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } if (!(caps & CLUIF_HASAUTOHIDEOPTION)) { DBWriteContactSettingByte(NULL, "CList", "AutoHide", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_AUTOHIDE)); DBWriteContactSettingWord(NULL, "CList", "HideTime", (WORD) SendDlgItemMessage(hwndDlg, IDC_HIDETIMESPIN, UDM_GETPOS, 0, 0)); } } DBWriteContactSettingByte(NULL, "CList", "SortByStatus", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_SORTBYSTATUS)); DBWriteContactSettingByte(NULL, "CList", "SortByProto", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_SORTBYPROTO)); DBWriteContactSettingByte(NULL, "CList", "ConfirmDelete", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_CONFIRMDELETE)); DBWriteContactSettingByte(NULL, "CList", "Tray1Click", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ONECLK)); DBWriteContactSettingByte(NULL, "CList", "AlwaysStatus", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ALWAYSSTATUS)); DBWriteContactSettingByte(NULL, "CList", "AlwaysMulti", (BYTE) ! IsDlgButtonChecked(hwndDlg, IDC_ALWAYSMULTI)); DBWriteContactSettingByte(NULL, "CList", "TrayIcon", (BYTE) (IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE) ? SETTING_TRAYICON_SINGLE : (IsDlgButtonChecked(hwndDlg, IDC_CYCLE) ? SETTING_TRAYICON_CYCLE : SETTING_TRAYICON_MULTI))); DBWriteContactSettingWord(NULL, "CList", "CycleTime", (WORD) SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_GETPOS, 0, 0)); DBWriteContactSettingWord(NULL, "CList", "IconFlashTime", (WORD) SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_GETPOS, 0, 0)); DBWriteContactSettingByte(NULL, "CList", "DisableTrayFlash", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); DBWriteContactSettingByte(NULL, "CList", "NoIconBlink", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ICONBLINK)); { int cur = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0); PROTOACCOUNT* pa = ( PROTOACCOUNT* )SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETITEMDATA, cur, 0 ); if ( pa == NULL ) DBDeleteContactSetting(NULL, "CList", "PrimaryStatus"); else DBWriteContactSettingString(NULL, "CList", "PrimaryStatus", pa->szModuleName ); } pcli->pfnTrayIconIconsChanged(); pcli->pfnLoadContactTree(); /* this won't do job properly since it only really works when changes happen */ pcli->pfnInvalidateDisplayNameCacheEntry( INVALID_HANDLE_VALUE ); /* force reshuffle */ return TRUE; } break; } break; } return FALSE; }
void CResourceVersionInfo::ExportToStream(GrowBuf &strm, int Index) { DWORD v; WORD wSize; int p, p1; strm.resize(0); SaveVersionHeader(strm, 0, sizeof (VS_FIXEDFILEINFO), 0, L"VS_VERSION_INFO", &m_FixedInfo); DefineList *pChildStrings = m_ChildStringLists.get_strings(Index); if ( pChildStrings->getnum() > 0 ) { GrowBuf stringInfoStream; int codepage = m_ChildStringLists.get_codepage(Index); LANGID langid = m_ChildStringLists.get_lang(Index); wchar_t Buff[16]; _snwprintf(Buff, COUNTOF(Buff), L"%04x%04x", langid, codepage); SaveVersionHeader(stringInfoStream, 0, 0, 0, Buff, &ZEROS); for ( int i = 0; i < pChildStrings->getnum(); i++ ) { PadStream (stringInfoStream); WCToUTF16LEHlpr cnvName, cnvValue; if (!cnvName.Create(pChildStrings->getname(i), codepage)) throw std::runtime_error("Unicode conversion failed"); if (!cnvValue.Create(pChildStrings->getvalue(i), codepage)) throw std::runtime_error("Unicode conversion failed"); p = stringInfoStream.getlen(); SaveVersionHeaderUTF16LE(stringInfoStream, 0, WORD(StrLenUTF16(cnvValue.Get()) + 1), 1, cnvName.Get(), (void*)cnvValue.Get()); cnvName.Destroy(), cnvValue.Destroy(); wSize = WORD(stringInfoStream.getlen() - p); *(WORD*)((PBYTE)stringInfoStream.get()+p)=wSize; } wSize = WORD(stringInfoStream.getlen()); *(WORD*)((PBYTE)stringInfoStream.get())=wSize; PadStream (strm); p = strm.getlen(); SaveVersionHeader(strm, 0, 0, 0, L"StringFileInfo", &ZEROS); strm.add (stringInfoStream.get(), stringInfoStream.getlen()); wSize = WORD(strm.getlen() - p); *(WORD*)((PBYTE)strm.get()+p)=wSize; } // Show all languages avaiable using Var-Translations if ( m_ChildStringLists.getnum() > 0 ) { PadStream (strm); p = strm.getlen(); SaveVersionHeader(strm, 0, 0, 0, L"VarFileInfo", &ZEROS); PadStream (strm); p1 = strm.getlen(); SaveVersionHeader(strm, 0, 0, 0, L"Translation", &ZEROS); // First add selected code language translation v = MAKELONG(m_ChildStringLists.get_lang(Index), m_ChildStringLists.get_codepage(Index)); strm.add (&v, sizeof (v)); for ( int k =0; k < m_ChildStringLists.getnum(); k++ ) { if ( k != Index ) { v = MAKELONG(m_ChildStringLists.get_lang(k), m_ChildStringLists.get_codepage(k)); strm.add (&v, sizeof (v)); } } wSize = WORD(strm.getlen() - p1); *(WORD*)((PBYTE)strm.get()+p1)=wSize; wSize = WORD(sizeof (int) * m_ChildStringLists.getnum()); p1+=sizeof(WORD); *(WORD*)((PBYTE)strm.get()+p1)=wSize; wSize = WORD(strm.getlen() - p); *(WORD*)((PBYTE)strm.get()+p)=wSize; } wSize = WORD(strm.getlen()); *(WORD*)((PBYTE)strm.get())=wSize; }
BOOL GetConfiguration( PEXT_ARG pExtArg, PDEVICE pDevice, PDISC pDisc ) { CDB::_GET_CONFIGURATION cdb = { 0 }; cdb.OperationCode = SCSIOP_GET_CONFIGURATION; cdb.RequestType = SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT; cdb.StartingFeature[1] = FeatureProfileList; WORD wSize = sizeof(GET_CONFIGURATION_HEADER); REVERSE_BYTES_SHORT(&cdb.AllocationLength, &wSize); _declspec(align(4)) GET_CONFIGURATION_HEADER configHeader = { 0 }; BYTE byScsiStatus = 0; if (!ScsiPassThroughDirect(pExtArg, pDevice, &cdb, CDB10GENERIC_LENGTH , &configHeader, wSize, &byScsiStatus, _T(__FUNCTION__), __LINE__) || byScsiStatus >= SCSISTAT_CHECK_CONDITION) { pDisc->SCSI.wCurrentMedia = ProfileCdrom; // not false. because undefined mmc1.. if (pDevice->byPlxtrDrive == PLXTR_DRIVE_TYPE::PX40TS) { pDevice->FEATURE.byCanCDText = TRUE; pDevice->FEATURE.byC2ErrorData = TRUE; } OutputDriveNoSupportLogA(GET_CONFIGURATION); } else { pDisc->SCSI.wCurrentMedia = MAKEWORD(configHeader.CurrentProfile[1], configHeader.CurrentProfile[0]); if (pDisc->SCSI.wCurrentMedia == ProfileInvalid) { OutputDriveLogA( "SCSIOP_GET_CONFIGURATION didn't fail. But it couldn't get CurrentMedia on this drive\n" "\tSet CurrentMedia to CD-ROM\n"); configHeader.CurrentProfile[1] = ProfileCdrom; pDisc->SCSI.wCurrentMedia = ProfileCdrom; } OutputGetConfigurationHeader(&configHeader); DWORD dwAllLen = MAKELONG(MAKEWORD(configHeader.DataLength[3], configHeader.DataLength[2]), MAKEWORD(configHeader.DataLength[1], configHeader.DataLength[0])) - sizeof(configHeader.DataLength) + sizeof(GET_CONFIGURATION_HEADER); LPBYTE pPConf = NULL; LPBYTE lpConf = NULL; if (!GetAlignedCallocatedBuffer(pDevice, &pPConf, dwAllLen, &lpConf, _T(__FUNCTION__), __LINE__)) { return FALSE; } REVERSE_BYTES_SHORT(&cdb.AllocationLength, &dwAllLen); if (!ScsiPassThroughDirect(pExtArg, pDevice, &cdb, CDB10GENERIC_LENGTH , lpConf, dwAllLen, &byScsiStatus, _T(__FUNCTION__), __LINE__) || byScsiStatus >= SCSISTAT_CHECK_CONDITION) { // not false. because undefined mmc1.. OutputDriveNoSupportLogA(GET_CONFIGURATION); } else { OutputGetConfigurationFeatureNumber(pDevice, lpConf + sizeof(GET_CONFIGURATION_HEADER), dwAllLen - sizeof(GET_CONFIGURATION_HEADER)); if (pDevice->byPlxtrDrive == (BYTE)PLXTR_DRIVE_TYPE::PXW1210A || pDevice->byPlxtrDrive == (BYTE)PLXTR_DRIVE_TYPE::PXW1210S) { // Somehow SetCDSpeed fails in PX-W1210... pDevice->FEATURE.bySetCDSpeed = FALSE; } } FreeAndNull(pPConf); } return TRUE; }
HWND InternalCreateDialog(HINSTANCE hInst, LPSTR lpDlg, HWND hWnd, DLGPROC lpFunc, LPARAM lParam) { DIALOGDATA *dp = (DIALOGDATA *) lpDlg; CONTROLDATA *cp; HWND hDlg; int i; HWND hCtl; HWND hFirst = 0,hFirstButton; int X,Y; HFONT hFont = (HFONT)0; HFONT ctlFont; DWORD dwBaseUnits; DWORD dwRet; WORD wDialogWidth, wDialogHeight; WORD wDlgCode; int nWidth, nHeight; int nXBorder = 0, nYBorder = 0; int cyCaption; LOGFONT LogFont; BOOL bVisible; DWORD dwStyle; #if 0 HDC hDC; HCURSOR hCursOld, hCursHourGlass; #endif dwBaseUnits = GetDialogFontUnits(hFont); wDialogWidth = LOWORD(dwBaseUnits); wDialogHeight = HIWORD(dwBaseUnits); dwStyle = dp->lStyle; /* force WS_POPUP style for top-level dialogs */ if (!(dwStyle & WS_CHILD)) dwStyle |= WS_POPUP; if (dwStyle & DS_SETFONT && dp->szFaceName != NULL && strlen(dp->szFaceName)) { memset((LPVOID)&LogFont,0,sizeof(LOGFONT)); /* dp->wPointSize is defined as the typographical point size,*/ /* it must be converted to the logical font size. */ #if 0 LogFont.lfHeight = -1 * MulDiv(dp->wPointSize, GetDeviceCaps (hDC, LOGPIXELSY), 72); #else /* dp->wPointSize is NOT a typographical point size. It is * the font height in dialog base units. It was misnamed. */ LogFont.lfHeight = (dp->wPointSize * wDialogHeight / 8); #endif LogFont.lfWeight = 700; strcpy(LogFont.lfFaceName,dp->szFaceName); hFont = CreateFontIndirect(&LogFont); } /* NOTE: * the coordinates here are from the resource file * we should not change them here, but in Windows.c. * this was converted from a straight muliply then * divide, to MulDiv, this will round up both the x,y * and the width. */ X = MulDiv(dp->x,wDialogWidth,4); Y = MulDiv(dp->y,wDialogHeight,8); nWidth = MulDiv(dp->cx,wDialogWidth,4); nHeight = MulDiv(dp->cy,wDialogHeight,8); /* final window size and coordinates should be adjusted by */ /* border and caption size depending on the style */ if (dwStyle & WS_DLGFRAME) { nXBorder = GetSystemMetrics(SM_CXDLGFRAME); nYBorder = GetSystemMetrics(SM_CYDLGFRAME); } else if (dwStyle & WS_BORDER) { nXBorder = GetSystemMetrics(SM_CXBORDER); nYBorder = GetSystemMetrics(SM_CYBORDER); } if (dwStyle & WS_THICKFRAME) { nXBorder = GetSystemMetrics(SM_CXFRAME); nYBorder = GetSystemMetrics(SM_CYFRAME); } X -= nXBorder; Y -= nYBorder; nWidth += 2*nXBorder; nHeight += 2*nYBorder; if ((dwStyle & WS_CAPTION) == WS_CAPTION) { cyCaption = GetSystemMetrics(SM_CYCAPTION); Y -= cyCaption; nHeight += cyCaption; } if (dwStyle & WS_VISIBLE) { bVisible = TRUE; dwStyle &= ~WS_VISIBLE; } else bVisible = FALSE; hDlg = CreateWindow( (!HIWORD(dp->szClassName) || !strlen(dp->szClassName))? TWIN_DIALOGCLASS:dp->szClassName, (HIWORD(dp->szCaption) && strlen(dp->szCaption))? dp->szCaption:" ", dwStyle, X,Y,nWidth,nHeight, hWnd, (HMENU)0, (hInst)?hInst: (hWnd?GetWindowInstance(hWnd):0), NULL ); if(hDlg == 0) { return 0; } /* * The following code was removed because it needlessly leaves * an hour glass on all of the applications windows while the dialog * box is up. Another call to SetCursor() was also commented out * at the end of this function. */ #if 0 hCursHourGlass = LoadCursor((HINSTANCE)0, IDC_WAIT); hCursOld = SetCursor(hCursHourGlass); #endif SetWF(hDlg,WFDIALOGWINDOW); SetWindowWord(hDlg,DWW_STATUS,0); SetWindowWord(hDlg,DWW_PARENT,hWnd); SetWindowLong(hDlg,DWL_DLGPROC,(LONG)lpFunc); SetWindowLong(hDlg,DWL_LPARAM,lParam); SetWindowWord(hDlg,DWW_DEFID,(WORD)0L); if (hFont) SendMessage(hDlg, WM_SETFONT, (WPARAM)hFont, (LPARAM)MAKELONG(FALSE,0)); for(i=0,cp=dp->controlinfo; i<(int)(dp->bNumberOfItems); i++,cp++) { hCtl = CreateWindow( cp->szClass?cp->szClass:"STATIC", ((!cp->szClass || !lstrcmpi(cp->szClass,"STATIC")) && ((cp->lStyle & 0xf) == SS_ICON))? NULL:cp->szText, cp->lStyle, (int)(cp->x*wDialogWidth)/4, (int)(cp->y*wDialogHeight)/8, (int)(cp->cx*wDialogWidth)/4, (int)(cp->cy*wDialogHeight)/8, hDlg, cp->wID, hWnd?GetWindowInstance(hWnd):hInst, NULL ); if(!hFirst && (cp->lStyle & WS_TABSTOP)) hFirst = hCtl; if ((!cp->szClass || !lstrcmpi(cp->szClass,"STATIC")) && ((cp->lStyle & 0xf) == SS_ICON)) { /* icon for the SS_ICON control comes from the same place, as dialog template, note, only send message if we actually have one */ if(cp->szText) SendMessage(hCtl, STM_SETICON, (WPARAM)LoadIcon(hInst,cp->szText), (LPARAM)0); } /* if a dialog class font was specified, and the control */ /* has not done a WM_SETFONT, then set this font. */ if(hFont) { ctlFont = (HFONT)SendMessage(hCtl, WM_GETFONT, 0, 0); if(ctlFont == 0) SendMessage( hCtl, WM_SETFONT, (WPARAM)hFont, (LPARAM)MAKELONG(FALSE,0) ); } } dwRet = SendMessage(hDlg,WM_INITDIALOG,(WPARAM)hFirst,lParam); for (hCtl = GetWindow(hDlg,GW_CHILD),hFirstButton = 0; hCtl; hCtl = GetWindow(hCtl,GW_HWNDNEXTSIB)) { wDlgCode = (WORD)SendMessage(hCtl,WM_GETDLGCODE,0,0L); if (wDlgCode & DLGC_DEFPUSHBUTTON) break; if ((wDlgCode & DLGC_UNDEFPUSHBUTTON) && (hFirstButton == 0)) hFirstButton = hCtl; } if (hCtl != 0) SetWindowWord(hDlg,DWW_DEFID,GetWindowID(hCtl)); else if (hFirstButton != 0) SetWindowWord(hDlg,DWW_DEFID,GetWindowID(hFirstButton)); else SetWindowWord(hDlg,DWW_DEFID,0); if (dwRet) { DlgSetFocus(hFirst); if ((WORD)SendMessage(hFirst,WM_GETDLGCODE,0,0L) & DLGC_HASSETSEL) Edit_SetSel(hFirst, 0, -1); } hCtl = GetFocus(); if(hCtl == 0) { hCtl = GetFirstDlgTabItem(hDlg); if(hCtl) { DlgSetFocus(hCtl); if ((WORD)SendMessage(hCtl,WM_GETDLGCODE,0,0L) & DLGC_HASSETSEL) Edit_SetSel(hCtl, 0, -1); } } if (bVisible) { ShowWindow(hDlg,SW_SHOWNORMAL); } if (bVisible) { UpdateWindow(hDlg); } #ifdef CURSORWARPING /* this will warp the cursor to the default button */ /* it only should be activated by a user preference */ /* and not automatically */ { HWND hWnd; int width ,height; RECT rcDlg; hWnd = hCtl; GetWindowRect(hWnd,&rcDlg); width = (rcDlg.left + rcDlg.right)/2; height = (rcDlg.bottom + rcDlg.top)/2; SetCursorPos(width,height); } #endif /* SetCursor(hCursOld); */ return hDlg; }
//----------------------------------------------------------------------------- unsigned long APIFUNC SCRIPT_DEBUGGER_GetVersion() { return MAKELONG(1, 0); }
void CLibraryHeaderBar::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) { AfxGetMainWnd()->SendMessage( WM_MENUSELECT, MAKELONG( nItemID, nFlags ), (LPARAM)hSysMenu ); }
/* * VerbAliasDialogProc: Dialog procedure for command verb alias dialog. */ BOOL CALLBACK VerbAliasDialogProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) { switch (message) { case WM_INITDIALOG: SendDlgItemMessage(hDlg, IDC_VERB, EM_LIMITTEXT, MAX_VERBLEN, 0L); SendDlgItemMessage(hDlg, IDC_EXPANSION, EM_LIMITTEXT, MAX_ALIASLEN, 0L); // Prepare list of aliases currently defined. { LV_COLUMN lvcol; HWND hList; int i; // Prepare list of aliases. hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); SetWindowFont(hList, GetFont(FONT_LIST), FALSE); SetWindowLong(hList, GWL_STYLE, GetWindowLong(hList, GWL_STYLE) | LVS_SHOWSELALWAYS); // Add column headings lvcol.mask = LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = GetString(hInst, IDS_AHEADER0); lvcol.cx = 60; ListView_InsertColumn(hList, 0, &lvcol); lvcol.pszText = GetString(hInst, IDS_AHEADER1); lvcol.cx = 220; ListView_InsertColumn(hList, 1, &lvcol); // Add aliases for (i = 0; i < _nVerbAliases; i++) { if (_apVerbAliases[i].verb[0]) { LV_ITEM lvitem; // Add item for verb. lvitem.mask = LVIF_TEXT; lvitem.iItem = ListView_GetItemCount(hList); lvitem.iSubItem = 0; lvitem.pszText = _apVerbAliases[i].verb; lvitem.iItem = ListView_InsertItem(hList, &lvitem); // Add subitem for command. lvitem.mask = LVIF_TEXT; lvitem.iSubItem = 1; lvitem.pszText = _apVerbAliases[i].text; ListView_SetItem(hList, &lvitem); } } } // Dialog is up. hAliasDialog = hDlg; hAliasDialog2 = hDlg; if (hAliasDialog1) DestroyWindow(GetDlgItem(hDlg, IDC_TUNNEL)); CenterWindow(hDlg, GetParent(hDlg)); return TRUE; case WM_NOTIFY: if (wParam != IDC_COMMAND_LIST) { return TRUE; } else { NM_LISTVIEW* pnm = (NM_LISTVIEW*)lParam; LV_HITTESTINFO lvhit; LV_KEYDOWN* plvkey; HWND hList; int i; if (!pnm) break; // Prepare list of aliases. hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); switch (pnm->hdr.code) { case NM_CLICK: { VerbAlias alias; LV_ITEM lvitem; HWND hList; hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); // If you click anywhere on an item. GetCursorPos(&lvhit.pt); ScreenToClient(hList, &lvhit.pt); lvhit.pt.x = 3; i = ListView_HitTest(hList, &lvhit); if (i < 0) break; // Get our current definition. lvitem.mask = LVIF_TEXT; lvitem.iItem = i; lvitem.iSubItem = 0; lvitem.pszText = alias.verb; lvitem.cchTextMax = sizeof(alias.verb); ListView_GetItem(hList, &lvitem); lvitem.iSubItem = 1; lvitem.pszText = alias.text; lvitem.cchTextMax = sizeof(alias.text); ListView_GetItem(hList, &lvitem); // Put it up for editing. SetDlgItemText(hDlg, IDC_VERB, alias.verb); SetDlgItemText(hDlg, IDC_EXPANSION, alias.text); // Select and focus the item in the list. ListView_SetItemState(hList, i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); } break; case LVN_KEYDOWN: plvkey = (LV_KEYDOWN*)pnm; if (plvkey->wVKey == VK_DELETE) { // for (i = 0; i < nItems; i++) // if (is selected i) // ListView_DeleteItem(hList, i); } break; } } return TRUE; case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: // Erase current set and redefine words in the dialog. { int i, nItems; HWND hList; hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); // Simulate a last click of 'Define' in case they forgot. // Does no harm if they left the boxes empty after their // last 'Define'. // ListView_ClearSelection(hList); SendMessage(hDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_DEFINE, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_DEFINE)); // Clear our real aliases and rebuild them from our listbox. // FreeVerbAliases(); nItems = ListView_GetItemCount(hList); for (i = 0; i < nItems; i++) { VerbAlias alias; LV_ITEM lvitem; lvitem.mask = LVIF_TEXT; lvitem.iItem = i; lvitem.iSubItem = 0; lvitem.pszText = alias.verb; lvitem.cchTextMax = sizeof(alias.verb); ListView_GetItem(hList, &lvitem); lvitem.iSubItem = 1; lvitem.pszText = alias.text; lvitem.cchTextMax = sizeof(alias.text); ListView_GetItem(hList, &lvitem); AddVerbAlias(alias.verb, alias.text); } } EndDialog(hDlg, IDOK); return TRUE; case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE; case IDC_DEFINE: { VerbAlias alias; LV_ITEM lvitem; HWND hList; hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); // Get our new definition. GetDlgItemText(hDlg, IDC_VERB, alias.verb, sizeof(alias.verb)); GetDlgItemText(hDlg, IDC_EXPANSION, alias.text, sizeof(alias.text)); if (!alias.verb[0]) { SetFocus(GetDlgItem(hDlg, IDC_VERB)); return TRUE; } if (!alias.text[0]) { SetFocus(GetDlgItem(hDlg, IDC_EXPANSION)); return TRUE; } // Simulate a remove so we don't have to hunt and modify existing entry. ListView_ClearSelection(hList); SendMessage(hDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_REMOVE, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_REMOVE)); // Add item for verb. lvitem.mask = LVIF_TEXT; lvitem.iItem = ListView_GetItemCount(hList); lvitem.iSubItem = 0; lvitem.pszText = alias.verb; lvitem.iItem = ListView_InsertItem(hList, &lvitem); // Add subitem for command. lvitem.mask = LVIF_TEXT; lvitem.iSubItem = 1; lvitem.pszText = alias.text; ListView_SetItem(hList, &lvitem); // Clear the fields to try another. SetDlgItemText(hDlg, IDC_VERB, ""); SetDlgItemText(hDlg, IDC_EXPANSION, ""); SetFocus(GetDlgItem(hDlg, IDC_VERB)); } return TRUE; case IDC_REMOVE: { char verb[MAX_VERBLEN+1]; LV_FINDINFO lvfind; HWND hList; int i; hList = GetDlgItem(hDlg, IDC_COMMAND_LIST); // Get our new definition. GetDlgItemText(hDlg, IDC_VERB, verb, sizeof(verb)); if (!verb[0]) { LV_ITEM lvitem; i = ListView_GetSelection(hList); if (i < 0) { SetFocus(GetDlgItem(hDlg, IDC_VERB)); return TRUE; } lvitem.mask = LVIF_TEXT; lvitem.iItem = i; lvitem.iSubItem = 0; lvitem.pszText = verb; lvitem.cchTextMax = sizeof(verb); ListView_GetItem(hList, &lvitem); if (!verb[0]) { SetFocus(GetDlgItem(hDlg, IDC_VERB)); return TRUE; } } // Find item for verb. lvfind.flags = LVFI_STRING | LVFI_WRAP; // not LVFI_PARTIAL lvfind.psz = verb; lvfind.lParam = 0; i = ListView_FindItem(hList, -1, &lvfind); if (i < 0) { SetFocus(GetDlgItem(hDlg, IDC_VERB)); Edit_SetSel(GetDlgItem(hDlg, IDC_VERB), 0, -1); return TRUE; } // Remove item. ListView_DeleteItem(hList, i); // Clear the fields to try another. SetDlgItemText(hDlg, IDC_VERB, ""); SetDlgItemText(hDlg, IDC_EXPANSION, ""); SetFocus(GetDlgItem(hDlg, IDC_VERB)); } return TRUE; case IDC_TUNNEL: if (!hAliasDialog1 && IDOK == DialogBox(hInst, MAKEINTRESOURCE(IDD_ALIAS), hDlg, AliasDialogProc)) { AliasSave(); SetFocus(GetDlgItem(hDlg, IDOK)); } return TRUE; } break; case WM_DESTROY: hAliasDialog = NULL; hAliasDialog2 = NULL; return TRUE; } return FALSE; }
LRESULT WINAPI ImmEscapeW( HKL hKL, HIMC hImc, UINT uSubFunc, LPVOID lpData) { PIMEDPI pImeDpi; LRESULT lRet = 0; pImeDpi = FindOrLoadImeDpi(hKL); if (pImeDpi == NULL) { RIPMSG0(RIP_WARNING, "ImmEscapeW: no pImeDpi entry."); return lRet; } if ((pImeDpi->ImeInfo.fdwProperty & IME_PROP_UNICODE) || lpData == NULL) { /* * Doesn't need W/A conversion. Calls directly to IME to * bring up the configuration dialogbox. */ lRet = (*pImeDpi->pfn.ImeEscape)(hImc, uSubFunc, lpData); ImmUnlockImeDpi(pImeDpi); return lRet; } /* * Unicode caller, ANSI IME. Needs W/A conversion depending on * uSubFunc. */ switch (uSubFunc) { case IME_ESC_GET_EUDC_DICTIONARY: case IME_ESC_IME_NAME: { CHAR szData[IME_T_EUDC_DIC_SIZE]; INT i; lRet = ImmEscapeA(hKL, hImc, uSubFunc, (LPVOID)szData); if (lRet != 0) { try { i = MultiByteToWideChar(CP_ACP, (DWORD)MB_PRECOMPOSED, (LPSTR)szData, // src (INT)strlen(szData), (LPWSTR)lpData, // dest (INT)IME_T_EUDC_DIC_SIZE); ((LPWSTR)lpData)[i] = L'\0'; } except (EXCEPTION_EXECUTE_HANDLER) { lRet = 0; } } break; } case IME_ESC_SET_EUDC_DICTIONARY: case IME_ESC_HANJA_MODE: { CHAR szData[IME_T_EUDC_DIC_SIZE]; BOOL bUDC; INT i; i = WideCharToMultiByte( CP_ACP, (DWORD)0, (LPWSTR)lpData, // src (INT)wcslen(lpData), (LPSTR)szData, // dest (INT)sizeof(szData), (LPSTR)NULL, (LPBOOL)&bUDC); szData[i] = '\0'; lRet = ImmEscapeA(hKL, hImc, uSubFunc, (LPVOID)szData); break; } case IME_ESC_SEQUENCE_TO_INTERNAL: { CHAR szData[4]; WCHAR wszData[4]; INT i = 0; lRet = ImmEscapeA(hKL, hImc, uSubFunc, lpData); if (HIBYTE(LOWORD(lRet))) szData[i++] = HIBYTE(LOWORD(lRet)); if (LOBYTE(LOWORD(lRet))) szData[i++] = LOBYTE(LOWORD(lRet)); i = MultiByteToWideChar(CP_ACP, (DWORD)MB_PRECOMPOSED, (LPSTR)szData, // src i, (LPWSTR)wszData, // dest (INT)sizeof(wszData)/sizeof(WCHAR)); switch (i) { case 1: lRet = MAKELONG(wszData[0], 0); break; case 2: lRet = MAKELONG(wszData[1], wszData[0]); break; default: lRet = 0; break; } break; } default: lRet = ImmEscapeA(hKL, hImc, uSubFunc, lpData); break; } ImmUnlockImeDpi(pImeDpi); return lRet; }
LRESULT CALLBACK PhpExtendedListViewWndProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { PPH_EXTLV_CONTEXT context; WNDPROC oldWndProc; context = (PPH_EXTLV_CONTEXT)GetProp(hwnd, PhpMakeExtLvContextAtom()); oldWndProc = context->OldWndProc; switch (uMsg) { case WM_DESTROY: { SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)oldWndProc); PhFree(context); RemoveProp(hwnd, PhpMakeExtLvContextAtom()); } break; case WM_NOTIFY: { LPNMHDR header = (LPNMHDR)lParam; switch (header->code) { case HDN_ITEMCLICK: { HWND headerHandle; headerHandle = (HWND)CallWindowProc(context->OldWndProc, hwnd, LVM_GETHEADER, 0, 0); if (header->hwndFrom == headerHandle) { LPNMHEADER header2 = (LPNMHEADER)header; if (header2->iItem == context->SortColumn) { if (context->TriState) { if (context->SortOrder == AscendingSortOrder) context->SortOrder = DescendingSortOrder; else if (context->SortOrder == DescendingSortOrder) context->SortOrder = NoSortOrder; else context->SortOrder = AscendingSortOrder; } else { if (context->SortOrder == AscendingSortOrder) context->SortOrder = DescendingSortOrder; else context->SortOrder = AscendingSortOrder; } } else { context->SortColumn = header2->iItem; context->SortOrder = AscendingSortOrder; } PhSetHeaderSortIcon(headerHandle, context->SortColumn, context->SortOrder); ExtendedListView_SortItems(hwnd); } } break; } } break; case WM_REFLECT + WM_NOTIFY: { LPNMHDR header = (LPNMHDR)lParam; switch (header->code) { case NM_CUSTOMDRAW: { if (header->hwndFrom == hwnd) { LPNMLVCUSTOMDRAW customDraw = (LPNMLVCUSTOMDRAW)header; switch (customDraw->nmcd.dwDrawStage) { case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: { BOOLEAN colorChanged = FALSE; HFONT newFont = NULL; if (context->ItemColorFunction) { customDraw->clrTextBk = context->ItemColorFunction( (INT)customDraw->nmcd.dwItemSpec, (PVOID)customDraw->nmcd.lItemlParam, context->Context ); colorChanged = TRUE; } if (context->ItemFontFunction) { newFont = context->ItemFontFunction( (INT)customDraw->nmcd.dwItemSpec, (PVOID)customDraw->nmcd.lItemlParam, context->Context ); } if (newFont) SelectObject(customDraw->nmcd.hdc, newFont); if (colorChanged) { if (PhGetColorBrightness(customDraw->clrTextBk) > 100) // slightly less than half customDraw->clrText = RGB(0x00, 0x00, 0x00); else customDraw->clrText = RGB(0xff, 0xff, 0xff); } if (!newFont) return CDRF_DODEFAULT; else return CDRF_NEWFONT; } break; } } } break; } } break; case WM_SETCURSOR: { if (context->Cursor) { SetCursor(context->Cursor); return TRUE; } } break; case WM_UPDATEUISTATE: { // Disable focus rectangles by setting or masking out the flag where appropriate. switch (LOWORD(wParam)) { case UIS_SET: wParam |= UISF_HIDEFOCUS << 16; break; case UIS_CLEAR: case UIS_INITIALIZE: wParam &= ~(UISF_HIDEFOCUS << 16); break; } } break; case ELVM_ADDFALLBACKCOLUMN: { if (context->NumberOfFallbackColumns < PH_MAX_COMPARE_FUNCTIONS) context->FallbackColumns[context->NumberOfFallbackColumns++] = (ULONG)wParam; else return FALSE; } return TRUE; case ELVM_ADDFALLBACKCOLUMNS: { ULONG numberOfColumns = (ULONG)wParam; PULONG columns = (PULONG)lParam; if (context->NumberOfFallbackColumns + numberOfColumns <= PH_MAX_COMPARE_FUNCTIONS) { memcpy( &context->FallbackColumns[context->NumberOfFallbackColumns], columns, numberOfColumns * sizeof(ULONG) ); context->NumberOfFallbackColumns += numberOfColumns; } else { return FALSE; } } return TRUE; case ELVM_INIT: { PhSetHeaderSortIcon(ListView_GetHeader(hwnd), context->SortColumn, context->SortOrder); // HACK to fix tooltips showing behind Always On Top windows. SetWindowPos(ListView_GetToolTips(hwnd), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); // Make sure focus rectangles are disabled. SendMessage(hwnd, WM_CHANGEUISTATE, MAKELONG(UIS_SET, UISF_HIDEFOCUS), 0); } return TRUE; case ELVM_SETCOLUMNWIDTH: { ULONG column = (ULONG)wParam; LONG width = (LONG)lParam; if (width == ELVSCW_AUTOSIZE_REMAININGSPACE) { RECT clientRect; LONG availableWidth; ULONG i; LVCOLUMN lvColumn; GetClientRect(hwnd, &clientRect); availableWidth = clientRect.right; i = 0; lvColumn.mask = LVCF_WIDTH; while (TRUE) { if (i != column) { if (CallWindowProc(oldWndProc, hwnd, LVM_GETCOLUMN, i, (LPARAM)&lvColumn)) { availableWidth -= lvColumn.cx; } else { break; } } i++; } if (availableWidth >= 40) return CallWindowProc(oldWndProc, hwnd, LVM_SETCOLUMNWIDTH, column, availableWidth); } return CallWindowProc(oldWndProc, hwnd, LVM_SETCOLUMNWIDTH, column, width); } break; case ELVM_SETCOMPAREFUNCTION: { ULONG column = (ULONG)wParam; PPH_COMPARE_FUNCTION compareFunction = (PPH_COMPARE_FUNCTION)lParam; if (column >= PH_MAX_COMPARE_FUNCTIONS) return FALSE; context->CompareFunctions[column] = compareFunction; } return TRUE; case ELVM_SETCONTEXT: { context->Context = (PVOID)lParam; } return TRUE; case ELVM_SETCURSOR: { context->Cursor = (HCURSOR)lParam; } return TRUE; case ELVM_SETITEMCOLORFUNCTION: { context->ItemColorFunction = (PPH_EXTLV_GET_ITEM_COLOR)lParam; } return TRUE; case ELVM_SETITEMFONTFUNCTION: { context->ItemFontFunction = (PPH_EXTLV_GET_ITEM_FONT)lParam; } return TRUE; case ELVM_SETREDRAW: { if (wParam) context->EnableRedraw++; else context->EnableRedraw--; if (context->EnableRedraw == 1) { SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); InvalidateRect(hwnd, NULL, FALSE); } else if (context->EnableRedraw == 0) { SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); } } return TRUE; case ELVM_SETSORT: { context->SortColumn = (ULONG)wParam; context->SortOrder = (PH_SORT_ORDER)lParam; PhSetHeaderSortIcon(ListView_GetHeader(hwnd), context->SortColumn, context->SortOrder); } return TRUE; case ELVM_SETSORTFAST: { context->SortFast = !!wParam; } return TRUE; case ELVM_SETTRISTATE: { context->TriState = !!wParam; } return TRUE; case ELVM_SETTRISTATECOMPAREFUNCTION: { context->TriStateCompareFunction = (PPH_COMPARE_FUNCTION)lParam; } return TRUE; case ELVM_SORTITEMS: { if (context->SortFast) { // This sort method is faster than the normal sort because our comparison function // doesn't have to call the list view window procedure to get the item lParam values. // The disadvantage of this method is that default sorting is not available - if a // column doesn't have a comparison function, it doesn't get sorted at all. ListView_SortItems( hwnd, PhpExtendedListViewCompareFastFunc, (LPARAM)context ); } else { ListView_SortItemsEx( hwnd, PhpExtendedListViewCompareFunc, (LPARAM)context ); } } return TRUE; } return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam); }