⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statusbar.cpp

📁 windows应用程序的一个工程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                          (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 + -