310 lines
6.8 KiB
C++
310 lines
6.8 KiB
C++
|
#include "precomp.h"
|
||
|
#include "resource.h"
|
||
|
#include "nmakwiz.h"
|
||
|
#include "wndprocs.h"
|
||
|
|
||
|
LRESULT CALLBACK RestrictAvThroughputWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
||
|
{
|
||
|
switch( iMsg )
|
||
|
{
|
||
|
case WM_VSCROLL:
|
||
|
{
|
||
|
OnMsg_VScroll( hwnd, wParam );
|
||
|
return 0;
|
||
|
break;
|
||
|
}
|
||
|
case WM_HSCROLL:
|
||
|
{
|
||
|
TCHAR szPos[ MAX_DIGITS ];
|
||
|
DWORD dwPos = SendMessage( GetDlgItem( hwnd, IDC_SLIDE_AV_THROUGHPUT), TBM_GETPOS, 0, 0);
|
||
|
wsprintf( szPos, "%d", dwPos );
|
||
|
Static_SetText( GetDlgItem( hwnd, IDC_STATIC_MAX_AV_THROUGHPUT), szPos );
|
||
|
return 0;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
{
|
||
|
return 0;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return( DefWindowProc( hwnd, iMsg, wParam, lParam ) );
|
||
|
}
|
||
|
|
||
|
LRESULT CALLBACK wndProcForCheckTiedToEdit( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
||
|
{
|
||
|
PSUBDATA pSubData = (PSUBDATA)GetWindowLong( hwnd, GWL_USERDATA );
|
||
|
WNDPROC proc = pSubData->proc;
|
||
|
|
||
|
switch( iMsg )
|
||
|
{
|
||
|
case WM_ENABLE:
|
||
|
{
|
||
|
if( Button_GetCheck( hwnd ) )
|
||
|
{
|
||
|
list< HWND >::const_iterator it;
|
||
|
|
||
|
for( it = pSubData -> list . begin(); it != pSubData -> list . end(); ++it )
|
||
|
{
|
||
|
::EnableWindow( (HWND)(*it), (BOOL)wParam );
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case BM_SETCHECK:
|
||
|
{
|
||
|
if( IsWindowEnabled( hwnd ) )
|
||
|
{
|
||
|
list< HWND >::const_iterator it;
|
||
|
|
||
|
for( it = pSubData -> list . begin(); it != pSubData -> list . end(); ++it )
|
||
|
{
|
||
|
::EnableWindow( (HWND)(*it), (BOOL)wParam );
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case WM_NCDESTROY:
|
||
|
{
|
||
|
delete pSubData;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return( CallWindowProc( proc, hwnd, iMsg, wParam, lParam ) );
|
||
|
}
|
||
|
|
||
|
int _ControlIsObscured( HWND parentControl, HWND hwndControl );
|
||
|
|
||
|
int _ControlIsObscured( HWND parentControl, HWND hwndControl )
|
||
|
{
|
||
|
RECT rectControl;
|
||
|
GetWindowRect( hwndControl, &rectControl );
|
||
|
|
||
|
RECT rectParent;
|
||
|
GetWindowRect( parentControl, &rectParent );
|
||
|
|
||
|
if( rectControl . top < rectParent . top )
|
||
|
{
|
||
|
// Scroll
|
||
|
return -1;
|
||
|
}
|
||
|
else if( rectControl . bottom > rectParent . bottom )
|
||
|
{
|
||
|
// Scroll
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
enum tagCategoryButtonStates
|
||
|
{
|
||
|
STATE_UNSELECTED,
|
||
|
STATE_SELECTED,
|
||
|
STATE_SELECTED_VIS,
|
||
|
STATE_CHECKED,
|
||
|
STATE_CHECKED_VIS
|
||
|
};
|
||
|
|
||
|
LRESULT CALLBACK CatListWndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
||
|
{
|
||
|
switch( iMsg )
|
||
|
{
|
||
|
case WM_CREATE:
|
||
|
{
|
||
|
// Note - this should be set to the top check box
|
||
|
PostMessage( hwnd, WM_COMMAND, MAKEWPARAM( IDC_SET_CALLING_OPTIONS, BN_CLICKED ), 0L );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
{
|
||
|
UINT uHiword = GET_WM_COMMAND_CMD(wParam, lParam);
|
||
|
UINT uLoword = GET_WM_COMMAND_ID(wParam, lParam);
|
||
|
switch( uHiword )
|
||
|
{
|
||
|
case BN_DOUBLECLICKED:
|
||
|
case BN_CLICKED:
|
||
|
{
|
||
|
HWND hwndButton = GetDlgItem(hwnd, uLoword);
|
||
|
ULONG uState = GetWindowLong( hwndButton, GWL_USERDATA );
|
||
|
switch( uState )
|
||
|
{
|
||
|
case STATE_UNSELECTED:
|
||
|
{
|
||
|
if (Button_GetCheck(hwndButton))
|
||
|
{
|
||
|
SetWindowLong(hwndButton, GWL_USERDATA, STATE_CHECKED_VIS );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetWindowLong(hwndButton, GWL_USERDATA, STATE_SELECTED_VIS );
|
||
|
}
|
||
|
g_pWiz->m_SettingsSheet.ShowWindow(uLoword, TRUE);
|
||
|
break;
|
||
|
}
|
||
|
case STATE_SELECTED:
|
||
|
case STATE_SELECTED_VIS:
|
||
|
{
|
||
|
if ((uHiword == BN_DOUBLECLICKED) && (STATE_SELECTED_VIS != uState))
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
Button_SetCheck( hwndButton, TRUE );
|
||
|
g_pWiz -> m_SettingsSheet . EnableWindow( uLoword, TRUE );
|
||
|
g_pWiz->m_SettingsSheet.SetFocus( uLoword );
|
||
|
SetWindowLong( hwndButton, GWL_USERDATA, STATE_CHECKED );
|
||
|
break;
|
||
|
}
|
||
|
case STATE_CHECKED:
|
||
|
case STATE_CHECKED_VIS:
|
||
|
{
|
||
|
if ((uHiword == BN_DOUBLECLICKED) && (STATE_CHECKED_VIS != uState))
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
Button_SetCheck( hwndButton, FALSE );
|
||
|
g_pWiz -> m_SettingsSheet . EnableWindow( uLoword, FALSE );
|
||
|
SetWindowLong( hwndButton, GWL_USERDATA, STATE_SELECTED );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case EN_SETFOCUS:
|
||
|
case BN_SETFOCUS:
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
case WM_VSCROLL:
|
||
|
{
|
||
|
OnMsg_VScroll( hwnd, wParam );
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return( DefWindowProc( hwnd, iMsg, wParam, lParam ) );
|
||
|
}
|
||
|
|
||
|
enum { SCROLL_JUMP = 20 };
|
||
|
|
||
|
void OnMsg_VScroll( HWND hwnd, WPARAM wParam )
|
||
|
{
|
||
|
int nPosition;
|
||
|
int nHorzScroll = 0;
|
||
|
int nVertScroll = 0;
|
||
|
SCROLLINFO ScrollInfo;
|
||
|
WORD wScrollCode = (WORD)LOWORD(wParam);
|
||
|
|
||
|
// Get current scroll information.
|
||
|
ScrollInfo.cbSize = sizeof(SCROLLINFO);
|
||
|
ScrollInfo.fMask = SIF_ALL;
|
||
|
GetScrollInfo(hwnd, SB_VERT, &ScrollInfo);
|
||
|
nPosition = ScrollInfo.nPos;
|
||
|
|
||
|
// Modify scroll information based on requested
|
||
|
// scroll action.
|
||
|
|
||
|
RECT rectWindow;
|
||
|
GetClientRect( hwnd, &rectWindow );
|
||
|
|
||
|
int iDelta;
|
||
|
switch (wScrollCode)
|
||
|
{
|
||
|
case SB_LINEDOWN:
|
||
|
iDelta = -SCROLL_JUMP;
|
||
|
ScrollInfo.nPos += SCROLL_JUMP;
|
||
|
break;
|
||
|
|
||
|
case SB_LINEUP:
|
||
|
iDelta = SCROLL_JUMP;
|
||
|
ScrollInfo.nPos -= SCROLL_JUMP;
|
||
|
break;
|
||
|
|
||
|
case SB_PAGEDOWN:
|
||
|
iDelta = -ScrollInfo.nPage;
|
||
|
ScrollInfo.nPos += ScrollInfo.nPage;
|
||
|
break;
|
||
|
|
||
|
case SB_PAGEUP:
|
||
|
iDelta = ScrollInfo.nPage;
|
||
|
ScrollInfo.nPos -= ScrollInfo.nPage;
|
||
|
break;
|
||
|
|
||
|
case SB_TOP:
|
||
|
iDelta = rectWindow . top - rectWindow . bottom;/*170;*/
|
||
|
ScrollInfo.nPos = ScrollInfo.nMin;
|
||
|
break;
|
||
|
|
||
|
case SB_BOTTOM:
|
||
|
iDelta = rectWindow . top - rectWindow . bottom;/*170;*/
|
||
|
ScrollInfo.nPos = ScrollInfo.nMax;
|
||
|
break;
|
||
|
|
||
|
// Don't do anything.
|
||
|
case SB_THUMBPOSITION:
|
||
|
case SB_THUMBTRACK:
|
||
|
iDelta = -(ScrollInfo.nTrackPos - ScrollInfo.nPos);
|
||
|
ScrollInfo.nPos = ScrollInfo.nTrackPos;
|
||
|
break;
|
||
|
|
||
|
case SB_ENDSCROLL:
|
||
|
default:
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Make sure that scroll position is in range.
|
||
|
if (0 > ScrollInfo.nPos)
|
||
|
{
|
||
|
ScrollInfo.nPos = 0;
|
||
|
}
|
||
|
else if (ScrollInfo.nMax - (int) ScrollInfo.nPage + 1 < ScrollInfo.nPos)
|
||
|
{
|
||
|
ScrollInfo.nPos = ScrollInfo.nMax - ScrollInfo.nPage + 1;
|
||
|
}
|
||
|
|
||
|
// Set new scroll position.
|
||
|
ScrollInfo.fMask = SIF_POS;
|
||
|
SetScrollInfo(hwnd, SB_VERT, &ScrollInfo, TRUE);
|
||
|
|
||
|
// Scroll window.
|
||
|
nVertScroll = nPosition - ScrollInfo.nPos;
|
||
|
|
||
|
|
||
|
ScrollWindowEx(hwnd, nHorzScroll, nVertScroll, NULL, NULL,
|
||
|
NULL, NULL, SW_ERASE | SW_INVALIDATE | SW_SCROLLCHILDREN);
|
||
|
|
||
|
//InvalidateRect( hwnd, NULL, TRUE );
|
||
|
if( 0 < iDelta )
|
||
|
{
|
||
|
iDelta += 1;
|
||
|
SetRect( &rectWindow, rectWindow . left, rectWindow . top , rectWindow . right, rectWindow . top + iDelta /*164, 200, 164 + 375, 200 + iDelta */ );
|
||
|
}
|
||
|
else if( 0 > iDelta )
|
||
|
{
|
||
|
iDelta -= 1;
|
||
|
SetRect( &rectWindow, rectWindow . left, rectWindow . bottom + iDelta , rectWindow . right, rectWindow . bottom /*164, 200 + 170 + iDelta, 164 + 375, 200 + 170*/ );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
MapWindowPoints( hwnd, GetParent( hwnd ), (LPPOINT) &rectWindow, 2 );
|
||
|
RedrawWindow( GetParent( hwnd ), &rectWindow, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ERASENOW | RDW_UPDATENOW | RDW_ALLCHILDREN );
|
||
|
|
||
|
return;
|
||
|
}
|