MSG.CPP
//**************************************************************************** 
//  Module:     NMUI.EXE      
//  File:       MSG.CPP 
//  Content:     
//               
// 
//  Copyright (c) Microsoft Corporation 1995-1997 
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF  
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO  
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A  
// PARTICULAR PURPOSE. 
//**************************************************************************** 
 
#include "precomp.h" 
 
// from cmd.cpp 
VOID CmdExit(void); 
LRESULT MsgCmdMain(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam); 
 
// from tbar.cpp 
LRESULT MsgNotifyTbar(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam); 
LRESULT MsgMenuSelect(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam); 
 
 
//**************************************************************************** 
// 
// Handle a WM_DESTROY message 
// 
//**************************************************************************** 
 
LRESULT MsgDestroy(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lParam) 
{ 
FreeAllComObjects(); 
PostQuitMessage(0); 
return 0; 
} 
 
 
//**************************************************************************** 
// 
// LRESULT MsgCreate(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lParam) 
// 
//**************************************************************************** 
 
LRESULT MsgCreate(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lParam) 
{ 
return 0; 
} 
 
 
//**************************************************************************** 
// 
// Handle a WM_CLOSE message 
// 
//**************************************************************************** 
 
LRESULT MsgClose(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam) 
{ 
FreeAllComObjects(); 
CmdExit(); 
return 0; 
} 
 
 
//**************************************************************************** 
// 
// Handle a WM_SIZE message 
// 
//**************************************************************************** 
 
LRESULT MsgSize(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam) 
{ 
int dxClient = LOWORD(lparam);  // width of client area 
int dyClient = HIWORD(lparam);  // height of client area 
 
SizeMsgWindow(dxClient, dyClient); 
SizeStatus(dxClient, 0); 
SendMessage(ghwndSbar, uMsg, wparam, lparam); 
 
return 0; 
} 
 
 
//**************************************************************************** 
// 
// Handle a WM_GETMINMAXINFO message 
// 
//**************************************************************************** 
 
LRESULT MsgGetMinMax(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam) 
{ 
LPMINMAXINFO lpminmax = (LPMINMAXINFO) lparam; 
 
if (gdxWndMin == 0 || gdyWndMin == 0) 
return 0; 
 
lpminmax->ptMinTrackSize.x = gdxWndMin; 
lpminmax->ptMinTrackSize.y = gdyWndMin; 
 
return 0; 
} 
 
//**************************************************************************** 
// 
// LRESULT MsgDrawItem(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
// 
//**************************************************************************** 
 
LRESULT MsgDrawItem(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
switch (wParam) 
{ 
case IDW_MSG: 
{ 
LPDRAWITEMSTRUCT lpdi = (LPDRAWITEMSTRUCT)lParam; 
TCHAR sz[MAX_PATH]; 
 
COLORREF cv = SendMessage(ghwndMsg, LB_GETITEMDATA, (WPARAM)lpdi->itemID, (LPARAM)0); 
SetTextColor(lpdi->hDC, cv); 
 
SendMessage(ghwndMsg, LB_GETTEXT, (WPARAM)lpdi->itemID, (LPARAM)sz); 
DrawText(lpdi->hDC, sz, -1, &lpdi->rcItem, DT_LEFT | DT_SINGLELINE); 
break; 
} 
case IDW_SBAR: 
{ 
if (0 != (((LPDRAWITEMSTRUCT) lParam)->itemData)) 
{ 
DrawIconEx(((LPDRAWITEMSTRUCT) lParam)->hDC,  
((LPDRAWITEMSTRUCT) lParam)->rcItem.left,  
((LPDRAWITEMSTRUCT) lParam)->rcItem.top,  
(HICON) (((LPDRAWITEMSTRUCT) lParam)->itemData), 
STATUSICONSIZE, STATUSICONSIZE, 0, NULL, DI_NORMAL); 
} 
break; 
} 
 
case IDL_USERS: 
{ 
DrawUserItem((LPDRAWITEMSTRUCT) lParam); 
break; 
} 
 
default: 
break; 
} /* switch */                                                           
 
return 0; 
} 
 
 
//**************************************************************************** 
// 
// LRESULT MsgNotify(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
// 
//**************************************************************************** 
 
LRESULT MsgNotify(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (((LPNMHDR) lParam)->idFrom) 
        { 
    case IDW_TBAR: 
        return MsgNotifyTbar(hwnd, uMsg, wParam, lParam); 
    default: 
        // It might still be for the toolbar (tooltips) 
        return MsgNotifyTbar(hwnd, uMsg, wParam, lParam); 
        } 
 
    return 0; 
} 
 
 
//////////////////////////////////////////////////////////////////////////// 
// Main window message table definition. 
static MSD _rgmsdMain[] = 
{ 
{WM_COMMAND,       MsgCmdMain}, 
{WM_NOTIFY,        MsgNotify}, 
{WM_CREATE,        MsgCreate}, 
{WM_DESTROY,       MsgDestroy}, 
{WM_CLOSE,         MsgClose}, 
{WM_SIZE,          MsgSize}, 
{WM_MENUSELECT,    MsgMenuSelect}, 
{WM_GETMINMAXINFO, MsgGetMinMax}, 
{WM_DRAWITEM,      MsgDrawItem}, 
 
{0, NULL}  // MUST be the last entry 
}; 
 
 
//**************************************************************************** 
// 
// Main Window proc 
// 
//**************************************************************************** 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
for (LPMSD lpmsd = _rgmsdMain; 0 != lpmsd->uMsg; lpmsd++) 
{ 
if (lpmsd->uMsg == uMsg) 
{ 
return lpmsd->pfnmsg(hwnd, uMsg, wParam, lParam); 
} 
} 
 
return DefWindowProc(hwnd, uMsg, wParam, lParam); 
}