?? mmaloglistbox.cpp
字號:
// ==========================================================================
// Les Fonctions Relatives aux messages de la boite de dialogue
// ==========================================================================
BOOL MMALogbookDlgProc_Destroy(HWND hwnd)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
pcLogbookDlg->m_cMMALogListBox.Detach();
if (pcLogbookDlg->m_hListBox)
{
DestroyWindow(pcLogbookDlg->m_hListBox);
pcLogbookDlg->m_hListBox = NULL;
}
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_InitDialog(HWND hwnd, HWND hwndFocus, LPARAM lInitParam)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)lInitParam;
SetWindowLong(hwnd, GWL_USERDATA, (LONG)pcLogbookDlg);
HMENU hSysMenu = GetSystemMenu(hwnd,FALSE);
int iSysCount = GetMenuItemCount(hSysMenu);
EnableMenuItem(hSysMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
MENUITEMINFO stMII;
// Add Separator line to system menu
memset(&stMII, 0, sizeof(stMII));
stMII.cbSize = sizeof(stMII);
stMII.fMask = MIIM_TYPE;
stMII.fType = MFT_SEPARATOR;
InsertMenuItem(hSysMenu, iSysCount - 2, TRUE, &stMII);
// Add new string to system menu
memset(&stMII, 0, sizeof(stMII));
stMII.cbSize = sizeof(stMII);
stMII.fMask = MIIM_TYPE | MIIM_ID;
stMII.fType = MFT_STRING;
stMII.dwTypeData = "Printer Setup";
stMII.cch = 13;
stMII.wID = 10000;
InsertMenuItem(hSysMenu, iSysCount - 1, TRUE, &stMII);
// Add new string to system menu
memset(&stMII, 0, sizeof(stMII));
stMII.cbSize = sizeof(stMII);
stMII.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
stMII.fType = MFT_STRING;
stMII.dwTypeData = "Printer and Page Setup";
stMII.cch = 22;
stMII.wID = 10001;
stMII.fState = MFS_DISABLED;
InsertMenuItem(hSysMenu, iSysCount, TRUE, &stMII);
// Add new string to system menu
memset(&stMII, 0, sizeof(stMII));
stMII.cbSize = sizeof(stMII);
stMII.fMask = MIIM_TYPE | MIIM_ID;
stMII.fType = MFT_STRING;
stMII.dwTypeData = "Print";
stMII.cch = 5;
stMII.wID = 10002;
InsertMenuItem(hSysMenu, iSysCount + 1, TRUE, &stMII);
RECT stDlgRect;
GetClientRect(hwnd, &stDlgRect);
pcLogbookDlg->m_hListBox = CreateWindowEx(WS_EX_CLIENTEDGE,
"LISTBOX",
"",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LBS_NOINTEGRALHEIGHT | LBS_OWNERDRAWVARIABLE | LBS_NOSEL,
MMALOGBOOKDLG_LEFTMARGIN,
MMALOGBOOKDLG_TOPMARGIN,
(stDlgRect.right - stDlgRect.left) - (MMALOGBOOKDLG_LEFTMARGIN + MMALOGBOOKDLG_RIGHTMARGIN),
(stDlgRect.bottom - stDlgRect.top) - (MMALOGBOOKDLG_TOPMARGIN + MMALOGBOOKDLG_BOTTOMMARGIN),
hwnd,
(HMENU)1000,
pcLogbookDlg->m_hInstance,
0);
if (pcLogbookDlg->m_hDlgFont)
SendMessage(pcLogbookDlg->m_hListBox, WM_SETFONT, (WPARAM)pcLogbookDlg->m_hDlgFont, MAKELPARAM(TRUE,0));
pcLogbookDlg->m_cMMALogListBox.Attach(pcLogbookDlg->m_hListBox, pcLogbookDlg->m_szFileName, pcLogbookDlg->m_lNbrLines);
return TRUE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_DrawItem(HWND hwnd, UINT idCtl, LPDRAWITEMSTRUCT lpdis)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
if (idCtl == 1000)
{
MMALogListBoxWndProc_DrawItem(lpdis);
return TRUE;
}
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_GetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpmmi)
{
lpmmi->ptMinTrackSize.x = 100;
lpmmi->ptMinTrackSize.y = 100;
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_LButtonDown(HWND hwnd, WPARAM fwKeys, WORD xPos, WORD yPos)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
if (!pcLogbookDlg->m_bNoMove)
PostMessage(hwnd, WM_SYSCOMMAND, SC_MOVE + 2, 0);
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_MeasureItem(HWND hwnd, UINT idCtl, LPMEASUREITEMSTRUCT lpmis)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
if (idCtl == 1000)
{
MMALogListBoxWndProc_MeasureItem(lpmis);
return TRUE;
}
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_NCHitTest(HWND hwnd, WORD xPos, WORD yPos, LRESULT *pResult)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
//if (!pcLogbookDlg->m_bNoMove && pcLogbookDlg->HasCaption())
//PostMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(xPos,yPos));
return FALSE;
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_Size(HWND hwnd, WPARAM fwSizeType, WORD nWidth, WORD nHeight)
{
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
if (!pcLogbookDlg->m_hListBox) return FALSE;
return SetWindowPos(pcLogbookDlg->m_hListBox,
NULL,
0,
0,
nWidth - (MMALOGBOOKDLG_LEFTMARGIN + MMALOGBOOKDLG_RIGHTMARGIN),
nHeight - (MMALOGBOOKDLG_TOPMARGIN + MMALOGBOOKDLG_BOTTOMMARGIN),
SWP_NOZORDER | SWP_NOMOVE);
}
// --------------------------------------------------------------------------
BOOL MMALogbookDlgProc_SysCommand(HWND hwnd, WPARAM uCmdType, WORD xPos, WORD yPos)
{
if ((uCmdType & 0xFFF0) == SC_CLOSE)
{
EndDialog(hwnd, IDCANCEL);
return TRUE;
}
CMMALogbookDlg *pcLogbookDlg = (CMMALogbookDlg *)GetWindowLong(hwnd, GWL_USERDATA);
if (uCmdType == 10000 && pcLogbookDlg) // Printer Setup
{
pcLogbookDlg->m_cMMALogListBox.PrinterSetup(hwnd);
}
// else if (uCmdType == 10001 && pcLogbookDlg) // Printer and Page Setup
// {
// pcLogbookDlg->m_cMMALogListBox.PrinterAndPageSetup(hwnd);
// }
else if (uCmdType == 10002 && pcLogbookDlg) // Print
{
pcLogbookDlg->m_cMMALogListBox.Print(hwnd, TRUE, "logbook.txt");
}
return FALSE;
}
// --------------------------------------------------------------------------
BOOL CALLBACK MMALogbookDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult;
if (message == WM_DESTROY && MMALogbookDlgProc_Destroy(hwnd)) return TRUE;
else if (message == WM_INITDIALOG && MMALogbookDlgProc_InitDialog(hwnd, (HWND)wParam, lParam)) return TRUE;
else if (message == WM_DRAWITEM && MMALogbookDlgProc_DrawItem(hwnd, (UINT)wParam, (LPDRAWITEMSTRUCT)lParam)) return TRUE;
else if (message == WM_GETMINMAXINFO && MMALogbookDlgProc_GetMinMaxInfo(hwnd, (LPMINMAXINFO)lParam)) return TRUE;
else if (message == WM_LBUTTONDOWN && MMALogbookDlgProc_LButtonDown(hwnd, wParam, LOWORD(lParam), HIWORD(lParam))) return TRUE;
else if (message == WM_MEASUREITEM && MMALogbookDlgProc_MeasureItem(hwnd, (UINT)wParam, (LPMEASUREITEMSTRUCT)lParam)) return TRUE;
else if (message == WM_NCHITTEST && MMALogbookDlgProc_NCHitTest(hwnd, LOWORD(lParam), HIWORD(lParam), &lResult)) return lResult;
else if (message == WM_SIZE && MMALogbookDlgProc_Size(hwnd, wParam, LOWORD(lParam), HIWORD(lParam))) return TRUE;
else if (message == WM_SYSCOMMAND && MMALogbookDlgProc_SysCommand(hwnd, wParam, LOWORD(lParam), HIWORD(lParam))) return TRUE;
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// class CMMALogListBoxItemMemory
CMMALogListBoxItemMemory::CMMALogListBoxItemMemory()
{
m_bNew = FALSE;
m_lType = 0;
m_hFont = NULL;
memset(m_szText , 0, sizeof(m_szText ));
memset(&m_stSystemTime, 0, sizeof(m_stSystemTime));
memset(&m_stLogFont , 0, sizeof(m_stLogFont ));
memset(&m_stTimeColors, 0, sizeof(m_stTimeColors));
memset(&m_stTypeColors, 0, sizeof(m_stTypeColors));
memset(&m_stTextColors, 0, sizeof(m_stTextColors));
}
// --------------------------------------------------------------------------
CMMALogListBoxItemMemory::~CMMALogListBoxItemMemory()
{
}
/////////////////////////////////////////////////////////////////////////////
// class CMMALogListBox
CMMALogListBox::CMMALogListBox()
{
memset(m_szPersonal, 0, sizeof(m_szPersonal));
m_hListBox = NULL;
m_hFile = -1;
m_bInitialized = FALSE;
m_lBias = 0;
m_lNbrLines = 0;
m_hPrintDC = NULL;
TIME_ZONE_INFORMATION stTZI;
if (GetTimeZoneInformation(&stTZI) != TIME_ZONE_ID_INVALID)
{
m_lBias = ((stTZI.Bias + stTZI.DaylightBias) / 60) * -1;
}
for (int I=0; I<4; I++)
{
m_clrDebugText[I] = GetSysColor(COLOR_WINDOWTEXT);
m_clrDebugBk[I] = GetSysColor(COLOR_WINDOW);
}
memset(m_szFileName, 0, sizeof(m_szFileName));
}
// --------------------------------------------------------------------------
CMMALogListBox::~CMMALogListBox()
{
Detach();
}
// --------------------------------------------------------------------------
// PROTECTED STATIC MEMBERS
// --------------------------------------------------------------------------
BOOL CMMALogListBox::DeleteListBoxString(HWND hListBox, int iIndex)
{
if (hListBox == NULL) return FALSE;
LINEDATA_MEMORY *pstLDM = (LINEDATA_MEMORY *)SendMessage(hListBox, LB_GETITEMDATA, (WPARAM)iIndex, 0L);
if ((LRESULT)pstLDM != LB_ERR)
{
if (pstLDM->hFont) DeleteObject(pstLDM->hFont);
delete pstLDM;
}
if (SendMessage(hListBox, LB_DELETESTRING, (WPARAM)iIndex, 0L) == LB_ERR) return FALSE;
return TRUE;
}
// --------------------------------------------------------------------------
long CMMALogListBox::GetExtentForEntireControl(HWND hListBox)
{
HFONT hFont, hOldFont;
HDC hDC = GetDC(hListBox);
TEXTMETRIC stTM;
SIZE stSize;
char szText[1024];
long lMaxCX = 0;
for (int I=0; I<SendMessage(hListBox, LB_GETCOUNT, 0L, 0L); I++)
{
LINEDATA_MEMORY *pstLDM = GetItemData(hListBox,I);
if (!pstLDM) continue;
hFont = pstLDM->hFont;
if (!hFont) hFont = (HFONT)SendMessage(hListBox, WM_GETFONT, 0L, 0L);
if (!hFont) continue;
hOldFont = (HFONT)SelectObject(hDC, hFont);
GetTextMetrics(hDC, &stTM);
strcpy(szText, pstLDM->stLDF.szText);
GetTextExtentPoint32(hDC, szText, strlen(szText), &stSize);
stSize.cx += stTM.tmAveCharWidth;
if (lMaxCX <= stSize.cx) lMaxCX = stSize.cx;
SelectObject(hDC, hOldFont);
}
SelectObject(hDC, hOldFont);
ReleaseDC(hListBox, hDC);
return lMaxCX;
}
// --------------------------------------------------------------------------
long CMMALogListBox::GetExtentForString(HWND hListBox, HFONT hFont, LPCTSTR lpszItem)
{
HDC hDC;
HFONT hOldFont;
hDC = GetDC(hListBox);
if (!hFont) hFont = (HFONT)SendMessage(hListBox, WM_GETFONT, 0L, 0L);
if (hFont)
{
hOldFont = (HFONT)SelectObject(hDC, hFont);
TEXTMETRIC stTM;
SIZE stSize;
GetTextMetrics(hDC, &stTM);
GetTextExtentPoint32(hDC, lpszItem, strlen(lpszItem), &stSize);
stSize.cx += stTM.tmAveCharWidth;
SelectObject(hDC, hOldFont);
ReleaseDC(hListBox, hDC);
return (long)stSize.cx;
}
ReleaseDC(hListBox, hDC);
return 0L;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -