You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
360 lines
7.7 KiB
360 lines
7.7 KiB
/*++
|
|
|
|
|
|
Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
|
|
Module Name:
|
|
|
|
MONUI.CPP
|
|
|
|
Abstract:
|
|
|
|
Author:
|
|
|
|
Vlad Sadovsky (vlads) 12-20-96
|
|
|
|
Revision History:
|
|
|
|
|
|
|
|
--*/
|
|
#include "precomp.h"
|
|
|
|
//
|
|
// Headers
|
|
//
|
|
#include "stiexe.h"
|
|
#include "device.h"
|
|
|
|
#include <windowsx.h>
|
|
#include <mmsystem.h>
|
|
|
|
#include "resource.h"
|
|
#include "monui.h"
|
|
|
|
//
|
|
// Private defines
|
|
//
|
|
#define ELAPSE_TIME 20000
|
|
|
|
extern UINT g_uiDefaultPollTimeout;
|
|
|
|
CSetTimeout::CSetTimeout(
|
|
int DlgID,
|
|
HWND hWnd,
|
|
HINSTANCE hInst,
|
|
UINT uiTimeout
|
|
)
|
|
: BASECLASS(DlgID, hWnd, hInst),
|
|
m_uiOrigTimeout(uiTimeout)
|
|
{
|
|
m_uiNewTimeOut = m_uiOrigTimeout;
|
|
m_fAllChange = FALSE;
|
|
|
|
m_fValidChange = FALSE;
|
|
}
|
|
|
|
CSetTimeout::~CSetTimeout()
|
|
{
|
|
}
|
|
|
|
int CSetTimeout::OnCommand(UINT id,HWND hwndCtl, UINT codeNotify)
|
|
{
|
|
switch (id) {
|
|
case IDOK:
|
|
{
|
|
CHAR szTimeoutString[10] = {'\0'};
|
|
int uiNewValue;
|
|
|
|
GetWindowTextA(GetDlgItem(IDC_TIMEOUT),szTimeoutString,sizeof(szTimeoutString));
|
|
uiNewValue = ::atoi(szTimeoutString);
|
|
if (uiNewValue != -1 ) {
|
|
m_uiNewTimeOut = uiNewValue*1000;
|
|
m_fValidChange = TRUE;
|
|
}
|
|
|
|
m_fAllChange = Button_GetCheck(GetDlgItem(IDC_CHECK_ALLDEVICES));
|
|
}
|
|
EndDialog(1);
|
|
return 1;
|
|
break;
|
|
|
|
|
|
case IDCANCEL:
|
|
EndDialog(0);
|
|
return 1;
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void CSetTimeout::OnInit()
|
|
{
|
|
TCHAR szTimeoutString[10] = {'\0'};
|
|
|
|
SendMessage(GetDlgItem(IDC_TIMEOUT), EM_LIMITTEXT, (sizeof(szTimeoutString) / sizeof(szTimeoutString[0])) -1, 0);
|
|
wsprintf(szTimeoutString,TEXT("%6d"),g_uiDefaultPollTimeout/1000);
|
|
Edit_SetText(GetDlgItem(IDC_TIMEOUT),szTimeoutString);
|
|
|
|
Button_SetCheck(GetDlgItem(IDC_CHECK_ALLDEVICES),FALSE);
|
|
}
|
|
|
|
//
|
|
// Dialog for selecting event processor .
|
|
// It is invoked when monitor can not identify single event processor
|
|
//
|
|
|
|
CLaunchSelection::CLaunchSelection(
|
|
int DlgID,
|
|
HWND hWnd,
|
|
HINSTANCE hInst,
|
|
ACTIVE_DEVICE *pDev,
|
|
PDEVICEEVENT pEvent,
|
|
STRArray &saProcessors,
|
|
StiCString &strSelected
|
|
)
|
|
: BASECLASS(DlgID, hWnd, hInst,ELAPSE_TIME),
|
|
m_saList(saProcessors),
|
|
m_strSelected(strSelected),
|
|
m_uiCurSelection(0),
|
|
m_pDevice(pDev),
|
|
m_pEvent(pEvent),
|
|
m_hPreviouslyActiveWindow(NULL)
|
|
{
|
|
//
|
|
// Save currently active window and focus
|
|
//
|
|
m_hPreviouslyActiveWindow = ::GetForegroundWindow();
|
|
|
|
|
|
}
|
|
|
|
CLaunchSelection::~CLaunchSelection()
|
|
{
|
|
// Restore previous window
|
|
if (IsWindow(m_hPreviouslyActiveWindow)) {
|
|
::SetForegroundWindow(m_hPreviouslyActiveWindow);
|
|
}
|
|
}
|
|
|
|
int CLaunchSelection::OnCommand(UINT id,HWND hwndCtl, UINT codeNotify)
|
|
{
|
|
LRESULT lrSize;
|
|
|
|
switch (id) {
|
|
case IDC_APP_LIST:
|
|
//
|
|
// Treat double-click on the list box item just like pressing OK button
|
|
// Pass through to next case if notification is about it
|
|
//
|
|
if (codeNotify != LBN_DBLCLK) {
|
|
return FALSE;
|
|
}
|
|
|
|
case IDOK:
|
|
{
|
|
|
|
//
|
|
// Save currently selected string
|
|
//
|
|
m_uiCurSelection = ::SendDlgItemMessage(GetWindow(), IDC_APP_LIST, LB_GETCURSEL, 0, (LPARAM) 0);
|
|
|
|
lrSize = ::SendDlgItemMessage(GetWindow(), IDC_APP_LIST, LB_GETTEXTLEN, m_uiCurSelection, (LPARAM) 0);
|
|
if (lrSize) {
|
|
::SendDlgItemMessage(GetWindow(), IDC_APP_LIST, LB_GETTEXT, m_uiCurSelection, (LPARAM) m_strSelected.GetBufferSetLength((INT)lrSize+1));
|
|
}
|
|
|
|
EndDialog(1);
|
|
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
{
|
|
m_strSelected.GetBufferSetLength(0);
|
|
EndDialog(0);
|
|
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
void CLaunchSelection::OnInit()
|
|
{
|
|
|
|
INT iCount;
|
|
|
|
//
|
|
// Set caption
|
|
//
|
|
StiCString strCaption;
|
|
DEVICE_INFO *pDeviceInfo = m_pDevice->m_DrvWrapper.getDevInfo();
|
|
WCHAR *wszDesc = NULL;
|
|
|
|
//
|
|
// Try to get the device's friendly name
|
|
//
|
|
if (pDeviceInfo) {
|
|
wszDesc = pDeviceInfo->wszLocalName;
|
|
}
|
|
|
|
//
|
|
// If we don't have a description string yet, use the the device ID
|
|
//
|
|
if (!wszDesc) {
|
|
wszDesc = m_pDevice->GetDeviceID();
|
|
}
|
|
|
|
strCaption.FormatMessage(IDS_APP_CHOICE_CAPTION, wszDesc);
|
|
::SetWindowText(GetWindow(),(LPCTSTR)strCaption);
|
|
|
|
//
|
|
// Fill list box with possible selection
|
|
//
|
|
if (m_saList.GetSize()) {
|
|
for (iCount = 0;iCount < m_saList.GetSize();iCount++) {
|
|
::SendDlgItemMessage( GetWindow(), IDC_APP_LIST, LB_ADDSTRING, 0, reinterpret_cast<LPARAM>((LPCTSTR)*m_saList[iCount]) );
|
|
}
|
|
}
|
|
|
|
HWND hwndThis = GetWindow();
|
|
|
|
#ifdef WINNT
|
|
DWORD dwProcessId;
|
|
|
|
//
|
|
// On Win2k we need to allow set foreground window
|
|
//
|
|
::GetWindowThreadProcessId(hwndThis, &dwProcessId);
|
|
::AllowSetForegroundWindow(dwProcessId);
|
|
#endif
|
|
|
|
//
|
|
// Make window active and foreground
|
|
//
|
|
::SetActiveWindow(hwndThis);
|
|
::SetForegroundWindow(hwndThis);
|
|
::SetFocus(hwndThis);
|
|
|
|
//Check: On Win9x can we bring window to top?
|
|
//::BringWindowToTop(hwndThis);
|
|
|
|
#ifdef WINNT
|
|
|
|
//
|
|
// Flash caption
|
|
//
|
|
FLASHWINFO fwi;
|
|
DWORD dwError;
|
|
|
|
fwi.cbSize = sizeof fwi;
|
|
fwi.hwnd = GetWindow();
|
|
fwi.dwFlags = FLASHW_ALL;
|
|
fwi.uCount = 10;
|
|
|
|
dwError = FlashWindowEx(&fwi);
|
|
|
|
#endif
|
|
|
|
//
|
|
// Attract user attention
|
|
//
|
|
#ifdef PLAYSOUND
|
|
::PlaySound("SystemQuestion",NULL,SND_ALIAS | SND_ASYNC | SND_NOWAIT | SND_NOSTOP);
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
BOOL
|
|
CALLBACK
|
|
CLaunchSelection::DlgProc(
|
|
HWND hDlg,
|
|
UINT uMessage,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
switch (uMessage) {
|
|
case WM_TIMER:
|
|
{
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
DWORD
|
|
DisplayPopup (
|
|
IN DWORD dwMessageId,
|
|
IN DWORD dwMessageFlags // = 0
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Puts up a popup for the corresponding message ID.
|
|
|
|
Arguments:
|
|
|
|
MessageId - the message ID to display. It is assumed to be in a
|
|
resource in this executable.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
DWORD cch = NO_ERROR;
|
|
LPTSTR messageText = NULL;
|
|
DWORD dwError;
|
|
|
|
StiCString strCaption;
|
|
|
|
strCaption.LoadString(STIEXE_EVENT_TITLE);
|
|
|
|
cch = ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_MAX_WIDTH_MASK |
|
|
FORMAT_MESSAGE_FROM_HMODULE,
|
|
::GetModuleHandle(NULL) ,
|
|
dwMessageId,
|
|
0,
|
|
(LPTSTR) &messageText,
|
|
1024,
|
|
NULL
|
|
);
|
|
|
|
dwError = GetLastError();
|
|
|
|
if (!cch || !messageText || !strCaption.GetLength()) {
|
|
return 0;
|
|
}
|
|
|
|
dwError = MessageBox(
|
|
NULL,
|
|
messageText,
|
|
(LPCTSTR)strCaption,
|
|
dwMessageFlags
|
|
#ifdef WINNT
|
|
| MB_DEFAULT_DESKTOP_ONLY | MB_SERVICE_NOTIFICATION
|
|
#endif
|
|
);
|
|
|
|
LocalFree( messageText );
|
|
|
|
return dwError;
|
|
|
|
} // DisplayPopup
|
|
|
|
|
|
|