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

📄 statusbar.cpp

📁 windows应用程序的一个工程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <richedit.h>
#include <commctrl.h>
#include "statusbar.h"
#pragma comment(lib,"comctl32.lib")
 
HINSTANCE hInst;      // current instance
HWND hWnd,hWndRichEdit,hWndStatusBar;

HDC hdcGlobal;
int iFace,nFaces;
PTRUETYPEFONTINFO pArrayOfTTFInfo;

#define NUM_PARTS 3
int pPartsWidth[]={200,226,-1};

HBITMAP hBmpAlignLeft,hBmpAlignCenter,hBmpAlignRight,hBmpAlign;

HMODULE hRTFLib,hCMMLib;

int WINAPI   WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    INITCOMMONCONTROLSEX cc;
    cc.dwSize=sizeof(cc);
    cc.dwICC=ICC_BAR_CLASSES;
    InitCommonControlsEx(&cc);

    hRTFLib=LoadLibrary("RICHED32.DLL");
    hCMMLib=LoadLibrary("COMMCTRL.DLL");
    
    if (!InitApplication(hInstance)) 
       return FALSE;

   if (!InitInstance(hInstance,nCmdShow)) 
       return FALSE;

   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0)) 
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return msg.wParam;
}

BOOL InitApplication(HINSTANCE hInstance)
{
    WNDCLASS wc;

    wc.style         = NULL;
    wc.lpfnWndProc   = (WNDPROC)MainWndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszClassName = "statusbarWClass";
    wc.lpszMenuName  = "statusbarMenu";
    return RegisterClass(&wc);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // Store instance handle in our global variable

   hWnd  =     CreateWindow("statusbarWClass", 
                            "statusbar Window",
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);

   if (!hWnd) 
      return FALSE;

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   HDC hdc;
   
   static TCHAR szBuf[128];
   static TCHAR szFontString[1024];
   static int nCurSize;
   static BOOL bShowStatusBar=true;
   static int nCyStatusBar;
   static int nCyClient,nCxClient;
   CHARFORMAT CharFormat;
   UINT uItem;
   RECT rcStatusBar;

   switch (message) {
      case WM_CREATE:
         hBmpAlignLeft    =LoadBitmap(hInst,"alignleft");
         hBmpAlignCenter  =LoadBitmap(hInst,"aligncenter");
         hBmpAlignRight   =LoadBitmap(hInst,"alignright");
         hWndRichEdit     =CreateWindowEx(WS_EX_CLIENTEDGE,"RICHEDIT", 
                            "",
                            WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_SAVESEL|WS_VSCROLL|WS_HSCROLL,
                            0,0,0,0,
                            hWnd,
                            (HMENU)ID_RICHEDIT,
                            hInst,
                            NULL);
         SendMessage(hWndRichEdit,EM_SETEVENTMASK,0,ENM_SELCHANGE);
//       hWndStatusBar    =CreateStatusWindow(
//                       WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,
//                       "",
//                          hWnd,
//                  ID_STATUSBAR);
       hWndStatusBar    =CreateWindow(STATUSCLASSNAME, "",
                       WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,
                       0,0,0,0,                                     
                          hWnd,
        (HMENU)ID_STATUSBAR,
        hInst,              
        NULL);              
 
         SendMessage(hWndStatusBar,SB_SETPARTS,(WPARAM)NUM_PARTS,(LPARAM)pPartsWidth);
         wsprintf(szBuf,"READY!");
         SendMessage(hWndStatusBar,SB_SETTEXT,0|SBT_NOBORDERS,(LPARAM)szBuf);
         hBmpAlign=hBmpAlignLeft;
         SendMessage(hWndStatusBar,SB_SETTEXT,1|SBT_OWNERDRAW|SBT_POPOUT,(LPARAM)hBmpAlign);
         SendMessage(hWndStatusBar,SB_SETTEXT,2,(LPARAM)"charformat:font,size,style effect");
         hdc=GetDC(hWndRichEdit);
         pArrayOfTTFInfo=BuildFontList(hdc);
         ReleaseDC(hWndRichEdit,hdc);
         SetFocus(hWndRichEdit);
         CharFormat.cbSize=sizeof(CHARFORMAT);
         CharFormat.dwMask=CFM_ITALIC|CFM_BOLD|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_FACE;
         CharFormat.dwEffects=0;
         lstrcpy(CharFormat.szFaceName,pArrayOfTTFInfo[0].plf->lfFaceName);
         SendMessage(hWndRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);
         CheckMenuRadioItem(GetMenu(hWnd),
                            IDM_ALIGNLEFT,IDM_ALIGNRIGHT,
                            IDM_ALIGNLEFT,
                            MF_BYCOMMAND);
         break;

      case WM_INITMENUPOPUP:
          if(HIWORD(lParam)) break;
          if(SendMessage(hWndRichEdit,EM_CANUNDO,0,0))
              EnableMenuItem(GetMenu(hWnd),
                             IDM_EDITUNDO,
                             MF_BYCOMMAND|MF_ENABLED);
          else
              EnableMenuItem(GetMenu(hWnd),
                             IDM_EDITUNDO,
                             MF_BYCOMMAND|MF_GRAYED);

          if(SendMessage(hWndRichEdit,EM_CANPASTE,0,0))
              EnableMenuItem(GetMenu(hWnd),
                             IDM_EDITPASTE,
                             MF_BYCOMMAND|MF_ENABLED);
          else
              EnableMenuItem(GetMenu(hWnd),
                             IDM_EDITPASTE,
                             MF_BYCOMMAND|MF_GRAYED);
          break;

      case WM_SIZE:
          if(bShowStatusBar) GetWindowRect(hWndStatusBar,&rcStatusBar);
          nCyStatusBar=rcStatusBar.bottom-rcStatusBar.top;
          nCyClient=HIWORD(lParam);
          nCxClient=LOWORD(lParam);
          MoveWindow(hWndRichEdit,0,0,
              nCxClient,bShowStatusBar?nCyClient-nCyStatusBar:nCyClient,TRUE);
          if(bShowStatusBar)
              MoveWindow(hWndStatusBar,0,nCyClient-nCyStatusBar,nCxClient,nCyClient,TRUE);
          break;

      case WM_MENUSELECT:
          if(LoadString(hInst,LOWORD(wParam),szBuf,128))
              SendMessage(hWndStatusBar,SB_SETTEXT,0|SBT_NOBORDERS,(LPARAM)szBuf);
          else
              SendMessage(hWndStatusBar,SB_SETTEXT,0|SBT_NOBORDERS,(LPARAM)"good luck!");
          break;

      case WM_DRAWITEM:
          if((int)wParam==ID_STATUSBAR)
          {
              LPDRAWITEMSTRUCT lpdis;
              HDC              hdcMem;
              BITMAP           bitmap;
              lpdis=(LPDRAWITEMSTRUCT)lParam;
              hdcMem=CreateCompatibleDC(lpdis->hDC);
              SelectObject(hdcMem,hBmpAlign);
              GetObject(hBmpAlignLeft,sizeof(bitmap),&bitmap);
              BitBlt(lpdis->hDC,lpdis->rcItem.left+5,lpdis->rcItem.top+1,
                  bitmap.bmWidth,bitmap.bmHeight,hdcMem,0,0,SRCCOPY);
              DeleteDC(hdcMem);
          }
          break;

      
      case WM_NOTIFY:
          switch(((LPNMHDR)lParam)->code){
          case EN_SELCHANGE:
              UpdateCaretPositionState(hWndRichEdit,hWndStatusBar);
              UpdateAlignState(hWnd,hWndRichEdit,hWndStatusBar);
              UpdateCharFormatState(hWnd,hWndRichEdit,hWndStatusBar);
              break;
          default:
              return (DefWindowProc(hWnd, message, wParam, lParam));
          }
          break;
      case WM_COMMAND:
          uItem=LOWORD(wParam);
         switch (uItem) {
             case IDM_BOLD:
             case IDM_ITALIC:
             case IDM_UNDERLINE:
             case IDM_STRIKEOUT:
                 HandleCharEffectCommand(hWndRichEdit,uItem);
                 UpdateCharFormatState(hWnd,hWndRichEdit,hWndStatusBar);
                 break;
             case IDM_SHOWSTATUSBAR:
                 bShowStatusBar=!bShowStatusBar;
                 CheckMenuItem(GetMenu(hWnd),
                                 IDM_SHOWSTATUSBAR,
                                 MF_BYCOMMAND|
                                 (bShowStatusBar?MF_CHECKED:MF_UNCHECKED));
                 ShowWindow(hWndStatusBar,(bShowStatusBar?SW_SHOW:SW_HIDE));
                 MoveWindow(hWndRichEdit,0,0,
                      nCxClient,bShowStatusBar?nCyClient-nCyStatusBar:nCyClient,TRUE);
                 if(bShowStatusBar)
                     MoveWindow(hWndStatusBar,0,nCyClient-nCyStatusBar,nCxClient,nCyClient,TRUE);
                 break;
            case IDM_ALIGNLEFT:
            case IDM_ALIGNCENTER:
            case IDM_ALIGNRIGHT:
                 HandleAlignCommand(hWnd,hWndRichEdit,uItem);
                 UpdateAlignState(hWnd,hWndRichEdit,hWndStatusBar);
                 break;
            case IDM_EDITUNDO:
                 SendMessage(hWndRichEdit,WM_UNDO,0,0);
                 break;
            case IDM_EDITCOPY:
                 SendMessage(hWndRichEdit,WM_COPY,0,0);
                 break;
            case IDM_EDITCUT:
                 SendMessage(hWndRichEdit,WM_CUT,0,0);
                 break;
            case IDM_EDITPASTE:
                 SendMessage(hWndRichEdit,WM_PASTE,0,0);
                 break;
            case IDM_EDITDELETE:
                 SendMessage(hWndRichEdit,WM_CLEAR,0,0);
                 break;
            case IDM_EDITSELECTALL:
                 SendMessage(hWndRichEdit,EM_SETSEL,0,-1);
                 break;
            case IDM_SELECTFONTFACE:
                 DialogBox(hInst,
                           "SELECTFONTFACEDLGBOX",
                           hWnd,
                           (DLGPROC)SelectFontFaceDlgProc);
                 break;
            case IDM_SELECTFONTSIZE:
                 DialogBox(hInst,
                           "SELECTFONTSIZEDLGBOX",
                           hWnd,
                           (DLGPROC)SelectFontSizeDlgProc);
                 break;
            case IDM_ABOUT:
                DialogBox(hInst,
                          "ABOUTBOX",
                          hWnd,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -