void MRUSelChange(HWND hDlg) { int nItem; HWND hCB; PSTARTINFO pStartInfo; LRESULT lresult; TCHAR szCmd[MAX_PATH]; hCB = GetDlgItem(hDlg, IDD_COMMAND); nItem = (int)SendMessage(hCB, CB_GETCURSEL, 0, 0L); if (nItem < 0) { return; } lresult = SendMessage(hCB, CB_GETITEMDATA, nItem, 0L); if ((lresult == 0) || (lresult == CB_ERR)) { return; } pStartInfo = (PSTARTINFO)lresult; #ifdef SHOWSTATES SendDlgItemMessage(hDlg, IDD_STATE, CB_SETCURSEL, pStartInfo->nState, 0L); #endif lresult = SendMessage(hCB, CB_GETLBTEXT, nItem, (LPARAM)szCmd); PathRemoveBlanks(szCmd); EnableOKButton(hDlg, szCmd); }
void BrowsePushed(LPRUNDLG_DATA lprd) { HWND hDlg = lprd->hDlg; TCHAR szText[MAX_PATH]; // Get out of the "synchronized input queues" state if (lprd->dwThreadId) { AttachThreadInput(GetCurrentThreadId(), lprd->dwThreadId, FALSE); lprd->dwThreadId = 0; } GetDlgItemText(hDlg, IDD_COMMAND, szText, ARRAYSIZE(szText)); PathUnquoteSpaces(szText); if (GetFileNameFromBrowse(hDlg, szText, ARRAYSIZE(szText), lprd->lpszWorkingDir, MAKEINTRESOURCE(IDS_EXE), MAKEINTRESOURCE(IDS_PROGRAMSFILTER), MAKEINTRESOURCE(IDS_BROWSE))) { PathQuoteSpaces(szText); SetDlgItemText(hDlg, IDD_COMMAND, szText); EnableOKButton(hDlg, szText); // place the focus on OK // SetFocus(GetDlgItem(hDlg, IDOK)); SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg, IDOK), TRUE); } }
static void Login_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id){ case IDOK: if(IsPasswordValid(hwnd)){ EndDialog(hwnd, IDOK); } break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; case IDC_EDT_PWRD_MAIN: case IDC_EDT_PWRD_SECOND: case IDC_EDT_PWRD_NEW: if(codeNotify == EN_CHANGE) EnableOKButton(hwnd); break; } }
BOOL CALLBACK RunDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPRUNDLG_DATA lprd; lprd = (LPRUNDLG_DATA)GetWindowLong(hDlg, DWL_USER); switch (uMsg) { case WM_INITDIALOG: /* The title will be in the lParam. */ lprd = (LPRUNDLG_DATA)lParam; lprd->hDlg = hDlg; lprd->fDone = FALSE; InitRunDlg(hDlg, lprd); // Let the parent thread run on if it was waiting for us to // grab type-ahead. if (lprd->hEventReady) { // We need to grab the activation so we can process input. // DebugMsg(DM_TRACE, "s.rdp: Getting activation."); SetForegroundWindow(hDlg); SetFocus(GetDlgItem(hDlg, IDD_COMMAND)); // Now it's safe to wake the guy up properly. // DebugMsg(DM_TRACE, "s.rdp: Waking sleeping parent."); SetEvent(lprd->hEventReady); CloseHandle(lprd->hEventReady); } else { SetForegroundWindow(hDlg); SetFocus(GetDlgItem(hDlg, IDD_COMMAND)); } // InitRunDlg 2nd phase (must be called after SetEvent) InitRunDlg2(hDlg, lprd); // We're handling focus changes. return FALSE; case WM_DESTROY: break; case WM_HELP: WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle, NULL, HELP_WM_HELP, (DWORD) (LPTSTR) aRunHelpIds); break; case WM_CONTEXTMENU: // right mouse click WinHelp((HWND) wParam, NULL, HELP_CONTEXTMENU, (DWORD) (LPTSTR) aRunHelpIds); break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDD_COMMAND: switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case CBN_SELCHANGE: MRUSelChange(hDlg); #ifdef WINNT if ( g_hCheckNow ) { SetEvent( g_hCheckNow ); } #endif // WINNT break; case CBN_EDITCHANGE: case CBN_SELENDOK: EnableOKButton(hDlg, NULL); #ifdef WINNT if ( g_hCheckNow ) { SetEvent( g_hCheckNow ); } #endif // WINNT break; } break; case IDOK: if (!OKPushed(lprd)) { #ifdef WINNT if (!(lprd->dwFlags & RFD_NOSEPMEMORY_BOX)) { g_bCheckRunInSep = FALSE; SetEvent( g_hCheckNow ); } #endif // WINNT break; } // fall through case IDCANCEL: ExitRunDlg(lprd, FALSE); break; case IDD_BROWSE: BrowsePushed(lprd); #ifdef WINNT SetEvent( g_hCheckNow ); #endif // WINNT break; default: return FALSE; } break; default: return FALSE; } return TRUE; }
void InitRunDlg(HWND hDlg, LPRUNDLG_DATA lprd) { HWND hCB; int i; #ifdef WINNT HANDLE hThread = NULL; DWORD dwDummy; #endif if (lprd->lpszTitle) SetWindowText(hDlg, lprd->lpszTitle); if (lprd->lpszPrompt) { SetDlgItemText(hDlg, IDD_PROMPT, lprd->lpszPrompt); } if (lprd->hIcon) { Static_SetIcon(GetDlgItem(hDlg, IDD_ICON), lprd->hIcon); } if (lprd->dwFlags & RFD_NOBROWSE) { HWND hBrowse; hBrowse = GetDlgItem(hDlg, IDD_BROWSE); ExchangeWindowPos(hBrowse, GetDlgItem(hDlg, IDCANCEL)); ExchangeWindowPos(hBrowse, GetDlgItem(hDlg, IDOK)); ShowWindow(hBrowse, SW_HIDE); } if (lprd->dwFlags & RFD_NOSHOWOPEN) { ShowWindow(GetDlgItem(hDlg, IDD_RUNDLGOPENPROMPT), SW_HIDE); } #ifdef SHOWSTATES /* Note that we need to fill this list first so that the SELCHANGE * message sent below will do the right thing. */ hCB = GetDlgItem(hDlg, IDD_STATE); for (i = 0; i < ARRAYSIZE(pnStates); ++i) { if (SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)(LPTSTR)szStates[i]) < 0) { break; } } SendMessage(hCB, CB_SETCURSEL, 0, 0L); #endif hCB = GetDlgItem(hDlg, IDD_COMMAND); SendMessage(hCB, CB_LIMITTEXT, MAX_PATH-1, 0L); OpenRunDlgMRU(); if (g_hMRURunDlg) { int nMax; TCHAR szCommand[MAX_PATH]; for (nMax=EnumMRUList(g_hMRURunDlg, -1, NULL, 0), i=0; i<nMax; ++i) { if (EnumMRUList(g_hMRURunDlg, i, szCommand, ARRAYSIZE(szCommand)) > 0) { PSTARTINFO pStartInfo; /* Parse the line into the STARTINFO struct */ pStartInfo = ParseIniLine(szCommand); /* The command to run goes in the combobox. */ if (SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)(LPTSTR)szCommand) != i) { if (pStartInfo) { LocalFree((HLOCAL)pStartInfo); } } else { SendMessage(hCB, CB_SETITEMDATA, i, (LPARAM)(LPSTARTINFO)pStartInfo); } } } } if (!(lprd->dwFlags & RFD_NODEFFILE)) { SendMessage(hCB, CB_SETCURSEL, 0, 0L); } SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDD_COMMAND, CBN_SELCHANGE), (LPARAM) hCB); SetWindowLong(hDlg, DWL_USER, (LONG)lprd); // Make sure the OK button is initialized properly EnableOKButton(hDlg, NULL); #ifdef WINNT // // Create the thread that will take care of the // "Run in Separate Memory Space" checkbox in the background. // if (lprd->dwFlags & RFD_NOSEPMEMORY_BOX) { ShowWindow(GetDlgItem(hDlg, IDD_RUNINSEPARATE), SW_HIDE); } else { Assert( g_hCheckNow==NULL ); g_hCheckNow = CreateEvent( NULL, TRUE, FALSE, NULL ); if (g_hCheckNow) { g_bCheckRunInSep = TRUE; hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)CheckRunInSeparateThread, (LPVOID)hDlg, 0, &dwDummy ); } if ((g_hCheckNow==NULL) || (!g_bCheckRunInSep) || (hThread==NULL)) { // // We've encountered a problem setting up, so make the user // choose. // CheckDlgButton( hDlg, IDD_RUNINSEPARATE, 1 ); EnableWindow( GetDlgItem( hDlg, IDD_RUNINSEPARATE ), TRUE ); g_bCheckRunInSep = FALSE; } // // These calls will just do nothing if either handle is NULL. // if (hThread) CloseHandle( hThread ); if (g_hCheckNow) SetEvent( g_hCheckNow ); } #endif // WINNT }
STDMETHODIMP CRunDropTarget_Drop(LPDROPTARGET pdtgt, LPDATAOBJECT pdtobj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { LPRUNDLG_DATA this = IToClass(RUNDLG_DATA, _dtgt, pdtgt); TCHAR szPath[MAX_PATH + 2]; LPTSTR lpszPath = szPath + 1; TCHAR szText[1024]; FORMATETC fmte = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; STGMEDIUM medium; DAD_DragLeave(); szPath[0] = TEXT('"'); lpszPath[0] = 0; *pdwEffect = 0; if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium))) { DragQueryFile(medium.hGlobal, 0, lpszPath, ARRAYSIZE(szPath) -1); SHReleaseStgMedium(&medium); } if (lpszPath[0] == 0) { #ifdef UNICODE fmte.cfFormat = CF_UNICODETEXT; if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium))) { lstrcpyn(lpszPath, GlobalLock(medium.hGlobal), ARRAYSIZE(szPath) -1); GlobalUnlock(medium.hGlobal); SHReleaseStgMedium(&medium); } else #endif { fmte.cfFormat = CF_TEXT; if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium))) { #ifdef UNICODE MultiByteToWideChar( CP_ACP, 0, GlobalLock(medium.hGlobal), -1, lpszPath, ARRAYSIZE(szPath) -1 ); #else lstrcpyn(lpszPath, GlobalLock(medium.hGlobal), ARRAYSIZE(szPath) -1); #endif GlobalUnlock(medium.hGlobal); SHReleaseStgMedium(&medium); } } } if (lpszPath[0]) { GetDlgItemText(this->hDlg, IDD_COMMAND, szText, ARRAYSIZE(szText) - (ARRAYSIZE(szPath) - 1)); if (StrChr(lpszPath, TEXT(' '))) { // there's a space in the file... add qutoes lpszPath--; lstrcat(lpszPath, c_szQuote); } if (szText[0]) lstrcat(szText, c_szSpace); lstrcat(szText, lpszPath); SetDlgItemText(this->hDlg, IDD_COMMAND, szText); EnableOKButton(this->hDlg, szText); *pdwEffect = DROPEFFECT_COPY; } return NOERROR; }