📄 statusbar.cpp
字号:
(DLGPROC)DlgAboutProc);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
break;
case WM_DESTROY:
if(hWndRichEdit) DestroyWindow(hWndRichEdit);
if(hWndStatusBar) DestroyWindow(hWndStatusBar);
if(hRTFLib){
FreeLibrary(hRTFLib);
hRTFLib=NULL;
}
if(hCMMLib){
FreeLibrary(hCMMLib);
hCMMLib=NULL;
}
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return 0;
}
void UpdateCaretPositionState(HWND hWndWndRichEdit,HWND hWndStatusBar)
{
char szPosInfo[256];
int iRow,iCol;
CHARRANGE CharRange;
SendMessage(hWndWndRichEdit,EM_EXGETSEL,0,(LPARAM)&CharRange);
iRow=(int)SendMessage(hWndWndRichEdit,EM_EXLINEFROMCHAR,0,(LPARAM)(CharRange.cpMin));
iCol=CharRange.cpMin-(int)SendMessage(hWndRichEdit,EM_LINEINDEX,iRow,0);
wsprintf(szPosInfo,"ROW:%d,COL:%d\t\tINDEX:%d",iRow+1,iCol+1,CharRange.cpMin);
SendMessage(hWndStatusBar,SB_SETTEXT,0|SBT_NOBORDERS,(LPARAM)szPosInfo);
}
void UpdateAlignState(HWND hWnd,HWND hWndWndRichEdit,HWND hWndStatusBar)
{
UINT uAlignCommand;
PARAFORMAT ParaFormat;
ParaFormat.cbSize=sizeof(PARAFORMAT);
ParaFormat.dwMask=PFM_ALIGNMENT;
SendMessage(hWndWndRichEdit,EM_GETPARAFORMAT,0,(LPARAM)&ParaFormat);
switch(ParaFormat.wAlignment){
case PFA_LEFT:
uAlignCommand=IDM_ALIGNLEFT;
hBmpAlign=hBmpAlignLeft;
break;
case PFA_CENTER:
uAlignCommand=IDM_ALIGNCENTER;
hBmpAlign=hBmpAlignCenter;
break;
case PFA_RIGHT:
uAlignCommand=IDM_ALIGNRIGHT;
hBmpAlign=hBmpAlignRight;
break;
}
SendMessage(hWndStatusBar,SB_SETTEXT,1|SBT_OWNERDRAW|SBT_POPOUT,(LPARAM)hBmpAlign);
CheckMenuRadioItem(GetMenu(hWnd),
IDM_ALIGNLEFT,IDM_ALIGNRIGHT,
uAlignCommand,
MF_BYCOMMAND);
}
void HandleAlignCommand(HWND hWnd,HWND hWndWndRichEdit,int iAlign)
{
PARAFORMAT ParaFormat;
ParaFormat.cbSize=sizeof(PARAFORMAT);
ParaFormat.dwMask=PFM_ALIGNMENT;
switch(iAlign){
case IDM_ALIGNLEFT:
ParaFormat.wAlignment=PFA_LEFT;
break;
case IDM_ALIGNCENTER:
ParaFormat.wAlignment=PFA_CENTER;
break;
case IDM_ALIGNRIGHT:
ParaFormat.wAlignment=PFA_RIGHT;
break;
}
SendMessage(hWndWndRichEdit,EM_SETPARAFORMAT,0,(LPARAM)&ParaFormat);
SendMessage(hWndWndRichEdit,EM_SETMODIFY,(WPARAM)true,0);
}
void UpdateCharFormatState(HWND hWnd,HWND hWndWndRichEdit,HWND hWndStatusBar)
{
BOOL bBold,bItalic,bUnderline,bStrikeout;
CHARFORMAT CharFormat;
char szCharFormat[256];
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_ITALIC|CFM_BOLD|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_FACE|CFM_SIZE;
SendMessage(hWndRichEdit,EM_GETCHARFORMAT,true,(LPARAM)&CharFormat);
bBold =(CharFormat.dwEffects&CFE_BOLD )?true:false;
bItalic =(CharFormat.dwEffects&CFE_ITALIC )?true:false;
bUnderline=(CharFormat.dwEffects&CFE_UNDERLINE)?true:false;
bStrikeout=(CharFormat.dwEffects&CFE_STRIKEOUT)?true:false;
CheckMenuItem(GetMenu(hWnd),IDM_BOLD,
MF_BYCOMMAND|
(bBold?MF_CHECKED:MF_UNCHECKED));
CheckMenuItem(GetMenu(hWnd),IDM_ITALIC,
MF_BYCOMMAND|
(bItalic?MF_CHECKED:MF_UNCHECKED));
CheckMenuItem(GetMenu(hWnd),IDM_UNDERLINE,
MF_BYCOMMAND|
(bUnderline?MF_CHECKED:MF_UNCHECKED));
CheckMenuItem(GetMenu(hWnd),IDM_STRIKEOUT,
MF_BYCOMMAND|
(bStrikeout?MF_CHECKED:MF_UNCHECKED));
wsprintf(szCharFormat,"[%s %d]",CharFormat.szFaceName,CharFormat.yHeight);
if(bBold) lstrcat(szCharFormat," BOLD");
if(bUnderline) lstrcat(szCharFormat," UNDERLINE");
if(bItalic) lstrcat(szCharFormat," ITALIC");
if(bStrikeout) lstrcat(szCharFormat," STRIKEOUT");
SendMessage(hWndStatusBar,SB_SETTEXT,2,(LPARAM)szCharFormat);
}
void HandleCharEffectCommand(HWND hWndWndRichEdit,UINT uCommand)
{
CHARFORMAT CharFormat;
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_ITALIC|CFM_BOLD|CFM_UNDERLINE|CFM_STRIKEOUT;
SendMessage(hWndRichEdit,EM_GETCHARFORMAT,true,(LPARAM)&CharFormat);
switch(uCommand){
case IDM_BOLD:
CharFormat.dwMask=CFM_BOLD;
CharFormat.dwEffects^=CFE_BOLD;
break;
case IDM_ITALIC:
CharFormat.dwMask=CFM_ITALIC;
CharFormat.dwEffects^=CFE_ITALIC;
break;
case IDM_UNDERLINE:
CharFormat.dwMask=CFM_UNDERLINE;
CharFormat.dwEffects^=CFE_UNDERLINE;
break;
case IDM_STRIKEOUT:
CharFormat.dwMask=CFM_STRIKEOUT;
CharFormat.dwEffects^=CFE_STRIKEOUT;
break;
}
SendMessage(hWndWndRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);
}
BOOL CALLBACK DlgAboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam)==IDOK) {
EndDialog(hDlg,TRUE);
return TRUE;
}
break;
}
return FALSE;
}
PTRUETYPEFONTINFO BuildFontList(HDC hdc){
nFaces=0;
hdcGlobal=hdc;
EnumFontFamilies(hdcGlobal,NULL,(FONTENUMPROC)MyEnumFontCountProc,(LPARAM)&nFaces);
pArrayOfTTFInfo=(PTRUETYPEFONTINFO)LocalAlloc(LPTR,sizeof(TRUETYPEFONTINFO)*(nFaces+1));
iFace=0;
EnumFontFamilies(hdcGlobal,NULL,(FONTENUMPROC)MyEnumFontFacesProc,(LPARAM)NULL);
// *retnFaces=nFaces;
return pArrayOfTTFInfo;
}
int CALLBACK MyEnumFontFacesProc(LPLOGFONT lpLogFont,LPTEXTMETRIC lpTextMetrics,
DWORD fFontType,LPVOID lpData){
if(fFontType&TRUETYPE_FONTTYPE)
{
pArrayOfTTFInfo[iFace].plf=(LPLOGFONT)LocalAlloc(LPTR,sizeof(LOGFONT));
pArrayOfTTFInfo[iFace].ptm=(LPTEXTMETRIC)LocalAlloc(LPTR,sizeof(TEXTMETRIC));
*(pArrayOfTTFInfo[iFace].plf)=*lpLogFont;
*(pArrayOfTTFInfo[iFace].ptm)=*lpTextMetrics;
iFace++;
}
return 1;
}
int CALLBACK MyEnumFontCountProc(LPLOGFONT lpLogFont,LPTEXTMETRIC lpTextMetrics,
DWORD fFontType,LPINT lpData){
if(fFontType&TRUETYPE_FONTTYPE)
(*lpData)++;
return 1;
}
BOOL CALLBACK SelectFontFaceDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int i;
CHARFORMAT CharFormat;
switch (message) {
case WM_INITDIALOG:
for(i=0;i<nFaces;i++)
SendDlgItemMessage(hDlg,IDC_FONTFACE,
CB_ADDSTRING,0,
(LPARAM)(LPCTSTR)pArrayOfTTFInfo[i].plf->lfFaceName);
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_FACE;
SendMessage(hWndRichEdit,EM_GETCHARFORMAT,true,(LPARAM)&CharFormat);
SendDlgItemMessage(hDlg,IDC_FONTFACE,
WM_SETTEXT,0,
(LPARAM)(LPCTSTR)CharFormat.szFaceName);
SetFocus(GetDlgItem(hDlg,IDC_FONTFACE));
return false;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_FONTFACE:
if(HIWORD(wParam)!=CBN_DBLCLK) break;
case IDOK:
SendDlgItemMessage(hDlg,IDC_FONTFACE,
WM_GETTEXT,sizeof(CharFormat.szFaceName),(LPARAM)CharFormat.szFaceName);
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_FACE;
SendMessage(hWndRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);
EndDialog(hDlg,TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,FALSE);
return TRUE;
default:
return FALSE;
}
}
return FALSE;
}
BOOL CALLBACK SelectFontSizeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static int aPoints[NUM_POINTS]={8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72};
char szFontSize[10];
int i;
CHARFORMAT CharFormat;
switch (message) {
case WM_INITDIALOG:
for(i=0;i<NUM_POINTS;i++){
wsprintf(szFontSize,"%d",aPoints[i]);
SendDlgItemMessage(hDlg,IDC_FONTSIZE,CB_ADDSTRING,0,(LPARAM)szFontSize);
}
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_SIZE;
SendMessage(hWndRichEdit,EM_GETCHARFORMAT,true,(LPARAM)&CharFormat);
wsprintf(szFontSize,"%d",CharFormat.yHeight/20);
SendDlgItemMessage(hDlg,IDC_FONTSIZE,CB_SELECTSTRING,(WPARAM)-1,(LPARAM)szFontSize);
SetFocus(GetDlgItem(hDlg,IDC_FONTFACE));
return false;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_FONTSIZE:
if(HIWORD(wParam)!=CBN_DBLCLK) break;
case IDOK:
SendDlgItemMessage(hDlg,IDC_FONTSIZE,
WM_GETTEXT,sizeof(szFontSize),(LPARAM)szFontSize);
CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_SIZE;
CharFormat.yHeight=atoi(szFontSize)*20;
SendMessage(hWndRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);
EndDialog(hDlg,TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,FALSE);
return TRUE;
default:
return FALSE;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -