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

📄 wndproc.c

📁 有关zip的一个开发实例。主要包括图片和程序源代码。
💻 C
📖 第 1 页 / 共 5 页
字号:
            fEnable = (UINT)SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0, 0);            EnableMenuItem(hmenuTrackPopup, IDM_EDIT_SELECT_ALL,               (fEnable ? MF_ENABLED : MF_DISABLED|MF_GRAYED)|MF_BYCOMMAND);            EnableMenuItem(hmenuTrackPopup, IDM_CLEAR_STATUS,               (fEnable ? MF_ENABLED : MF_DISABLED|MF_GRAYED)|MF_BYCOMMAND);            /* Draw and track the "floating" popup */#ifdef WIN32            TrackPopupMenuEx(hmenuTrackPopup,                         TPM_LEFTALIGN | TPM_TOPALIGN |     /* default values */                         TPM_LEFTBUTTON | TPM_HORIZONTAL |  /* equivalent to 0 */                         TPM_RIGHTBUTTON,                   /* Right selection */                         pt.x, pt.y,                         hWndEdit,                         NULL);#else            TrackPopupMenu(hmenuTrackPopup,                         TPM_LEFTALIGN |      /* default values */                         TPM_LEFTBUTTON |                         TPM_RIGHTBUTTON,     /* Right selection */                         pt.x, pt.y, 0,                         hWnd,                         NULL);#endif           }        return 0;        }    /*     *     * This section is solely to cause the bubble help to be drawn with     * different colors than the background window. This is not necessary     * for 16 bit windows, as this is done for you.     *     */#ifdef WIN32    case WM_CTLCOLORSTATIC:           {           POINT point;           SetBkColor((HDC)wParam, GetSysColor(COLOR_INFOBK));           SetBkMode((HDC)wParam, OPAQUE);           SetTextColor((HDC)wParam, GetSysColor(COLOR_INFOTEXT));           point.x = point.y = 0;           ClientToScreen(hWnd, &point);           SetBrushOrgEx((HDC)wParam, point.x, point.y, NULL);           hBrush = CreateSolidBrush(GetSysColor(COLOR_INFOBK));           return ((DWORD)hBrush);           }#endif    case WM_COMMAND:        /* Was F1 just pressed in a menu, or are we in help mode */        /* (Shift-F1)? */        if (uf.fHelp)           {           GetHelpContext(wParam);           if ((!dwHelpContextId) && (uf.fHelp))              {              MessageBox( hWnd, "Context Help not available for this item",                         "Help Example", MB_OK);              }           else              if (uf.fHelp)                  WinHelp(hWnd,szHelpFileName,HELP_CONTEXT,dwHelpContextId);           uf.fHelp = FALSE;        }        else /* not in help mode */        {#ifndef WIN32        RECT  rClient;#endif            switch (LOWORD(wParam))            {            case IDM_GREP_ARCHIVE:               {               extern char baseDir[PATH_MAX];               extern char SearchPattern[PATH_MAX];               char *p, drive[2], szTmp[PATH_MAX];               OPENFILENAME ofn;#ifndef WIN32               FARPROC lpfnGrepArchive;#endif//               dwCommDlgHelpId = HELPID_MAKEDIR_HELP; /* if someone hits help */               if ( uf.fCanDragDrop )                    DragAcceptFiles( hWnd, FALSE );#ifndef WIN32               _fmemset(&ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#else               memset(&ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#endif               WinAssert(hWnd);               szTmp[0] = '\0';               ofn.lStructSize = sizeof(OPENFILENAME);               ofn.hwndOwner = hWnd;               ofn.hInstance = hInst;               ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";               ofn.nFilterIndex = 1;               ofn.lpstrFile = szTmp;               ofn.nMaxFile = PATH_MAX;               ofn.lpstrFileTitle = NULL;               ofn.nMaxFileTitle = PATH_MAX; /* ignored ! */               ofn.lpstrTitle = (LPSTR)"Find Files in Archive";               ofn.lpstrInitialDir = NULL;               ofn.Flags = OFN_SHOWHELP | OFN_ENABLEHOOK | OFN_CREATEPROMPT |                  OFN_HIDEREADONLY | OFN_ENABLETEMPLATE | OFN_NOCHANGEDIR;#ifndef WIN32               lpfnGrepArchive = MakeProcInstance((FARPROC)GrepArchiveProc, hInst);#   ifndef MSC               (UINT CALLBACK *)ofn.lpfnHook = (UINT CALLBACK *)lpfnGrepArchive;#   else               ofn.lpfnHook = lpfnGrepArchive;#   endif#else               ofn.lpfnHook = (LPOFNHOOKPROC)GrepArchiveProc;#endif               ofn.lpTemplateName = "GREPARCHIVES";   /* see grep.dlg   */               GetOpenFileName(&ofn);               if ((lstrlen(SearchPattern) != 0) &&                  (lstrlen(baseDir) != 0))                  {                  drive[0] = baseDir[0];                  drive[1] = '\0';                  p = &baseDir[2];                  /* Off we go - the control handle is set to null as a flag */                  FindFile(drive, p, NULL);                  }               }               if (uf.fCanDragDrop)                   DragAcceptFiles(hWnd, TRUE);               break;#ifndef WIN32            /* Deal with the Edit box menu items */            case IDM_EDIT_UNDO:                    SendMessage(hWndEdit, EM_UNDO, 0, 0);               break;            case IDM_EDIT_CUT:                    SendMessage(hWndEdit, WM_CUT, 0, 0);               break;            case IDM_EDIT_COPY:                    SendMessage(hWndEdit, WM_COPY, 0, 0);               break;            case IDM_EDIT_PASTE:                    SendMessage(hWndEdit, WM_PASTE, 0, 0);               break;            case IDM_EDIT_DELETE:                    SendMessage(hWndEdit, WM_CLEAR, 0, 0);               SetWindowText(hWndStatic, "WiZ Edit/Status Window");               break;            case IDM_EDIT_SELECT_ALL:                    SendMessage(hWndEdit, EM_SETSEL, (WPARAM)0,                  (LPARAM)MAKELPARAM(0,-1));               break;#endif            case IDM_ZIP_TARGET:            case IDM_ZIP_PREFERENCES:            case IDM_UNZIP_PREFERENCES:                if ( uf.fCanDragDrop )                    DragAcceptFiles( hWnd, FALSE );                ZipWndProc(hWnd, wMessage, wParam, lParam);                WriteZipOptionsProfile();                if ( uf.fCanDragDrop )                    DragAcceptFiles( hWnd, TRUE );               break;            case IDM_OPEN:                /* If unzipping separately and previous file exists,                 * go to directory where archive lives.                 */                if ( uf.fCanDragDrop )                    DragAcceptFiles( hWnd, FALSE );            /* If not unzipping to same directory as archive and             * file already open, go to where file lives.             * If extracting to different directory, return to             * that directory after selecting archive to open.             */            if (lpumb->szUnzipFromDirName[0])               {               lstrcpy(lpumb->szDirName, lpumb->szUnzipFromDirName);               }            if (lpumb->szFileName[0])               {               /* strip off filename to make directory name    */               GetArchiveDir(lpumb->szDirName);               }            else               {               if (!lpumb->szUnzipFromDirName[0])                  lpumb->szDirName[0] = '\0'; /* assume no dir   */               }            lpumb->szBuffer[0] = '\0';#ifndef WIN32            _fmemset(&lpumb->ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#else            memset(&lpumb->ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#endif            lpumb->ofn.lStructSize = sizeof(OPENFILENAME);            lpumb->ofn.hwndOwner = hWnd;            lpumb->ofn.lpstrFilter = "Zip Files (*.zip)\0*.zip\0Self-extracting Files (*.exe)\0*.exe\0All Files (*.*)\0*.*\0\0";            lpumb->ofn.nFilterIndex = 1;            lpumb->ofn.lpstrFile = lpumb->szFileName;            lpumb->szFileName[0] = '\0';   /* no initial filename   */            lpumb->ofn.nMaxFile = PATH_MAX;            lpumb->ofn.lpstrFileTitle = lpumb->szBuffer; /* ignored */            lpumb->ofn.lpstrInitialDir = (LPSTR)(!lpumb->szDirName[0] ? NULL : lpumb->szDirName);            lpumb->ofn.nMaxFileTitle = PATH_MAX;            lpumb->ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST |                   OFN_HIDEREADONLY|OFN_NOVALIDATE;            dwCommDlgHelpId = HELPID_OPEN; /* specify correct help for open dlg   */            if (GetOpenFileName(&lpumb->ofn))   /* if successful file open  */               {               /* Yes, you should be able to get the fully qualified path name                  in lpumb->szFileName when you return from GetOpenFileName(),                  however, at least Borland 4.52 (others?) does not return a fully                  qualified path, but simply the file name. This kludge gets                  around that.                */                 getcwd(lpumb->szDirName, PATH_MAX);               /* If we get a fully qualified file name, then the second                  character should be a colon.                */               if (lpumb->szFileName[1] != ':')                  {                  lstrcpy(lpumb->szBuffer, lpumb->szDirName);                  if (lpumb->szBuffer[lstrlen(lpumb->szBuffer)-1] != '\\')                     lstrcat(lpumb->szBuffer, "\\");                  lstrcat(lpumb->szBuffer, lpumb->szFileName);                  lstrcpy(lpumb->szFileName, lpumb->szBuffer);                  }               /*               Save the last "unzip from" directory               */               if (lpumb->szDirName[1] == ':')                  drive = lpumb->szDirName[0];               else                  drive = '\0';               if (uf.fSaveUnZipFromDir &&                  (toupper(drive) != 'A') &&                  (toupper(drive) != 'B'))                  {                  lstrcpy(lpumb->szUnzipFromDirName, lpumb->szDirName);                  if (lpumb->szUnzipFromDirName[strlen(lpumb->szUnzipFromDirName)-1]                     == ':')                     lstrcat(lpumb->szUnzipFromDirName, "\\");                  WritePrivateProfileString(szAppName, szDefaultUnzipFromDir,                                 lpumb->szUnzipFromDirName, szWiZIniFile);                  }               else                  WritePrivateProfileString(szAppName, szDefaultUnzipFromDir,                                 "", szWiZIniFile);               if (uf.fUnzipToZipDir || /* unzipping to same directory as archive */                  szUnzipToDirName[0] == '\0') /* or no default */                  {                  /* strip off filename to make directory name    */                  lstrcpy(szUnzipToDirName, lpumb->szDirName);                  }               }               UpdateListBox(); /* fill in list box */#ifndef WIN32               SendMessage(hWndList, LB_SETSEL, 1, 0L);#else                ListViewSetSel(0, TRUE);#endif                              UpdateButtons(); /* update state of buttons */               SetCaption(hWnd);#ifndef WIN32               /* Update archive totals area */               WinAssert(hWndList);               GetClientRect( hWndList, &rClient );               OffsetRect( &rClient, 0, dyChar );               rClient.top = rClient.bottom;               rClient.bottom = rClient.top + (6*dyChar);               InvalidateRect( hWnd, &rClient, TRUE);#endif               if ( uf.fCanDragDrop )                  DragAcceptFiles( hWnd, TRUE );               break;            case IDM_CHDIR:                if ( uf.fCanDragDrop )                    DragAcceptFiles( hWnd, FALSE );#ifndef WIN32                _fmemset(&lpumb->ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#else                memset(&lpumb->ofn, '\0', sizeof(OPENFILENAME)); /* initialize struct */#endif                lpumb->ofn.lStructSize = sizeof(OPENFILENAME);                lpumb->ofn.hwndOwner = hWnd;                lpumb->ofn.hInstance = hInst;                lpumb->ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";                lpumb->ofn.nFilterIndex = 1;                lstrcpy(lpumb->szUnzipToDirNameTmp, szUnzipToDirName); /* initialize */                { /* Braces are here to allow the declaration of uDirNameLen */#ifndef WIN32                size_t uDirNameLen = _fstrlen(lpumb->szUnzipToDirNameTmp);#else                size_t uDirNameLen = strlen(lpumb->szUnzipToDirNameTmp);#endif               /* If '\\' not at end of directory name, add it now.                */                if (uDirNameLen > 0 && lpumb->szUnzipToDirNameTmp[uDirNameLen-1] != '\\')                   lstrcat(lpumb->szUnzipToDirNameTmp, "\\");                }                lstrcat(lpumb->szUnzipToDirNameTmp,                    "johnny\376\376.\375\374\373"); /* fake name */                lpumb->ofn.lpstrFile = lpumb->szUnzipToDirNameTmp; /* result goes here! */                lpumb->ofn.nMaxFile = PATH_MAX;                lpumb->ofn.lpstrFileTitle = NULL;                lpumb->ofn.nMaxFileTitle = PATH_MAX; /* ignored ! */                lpumb->ofn.lpstrInitialDir = szUnzipToDirName;                lpumb->ofn.lpstrTitle = (LPSTR)"Unzip To";                lpumb->ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST |                           OFN_HIDEREADONLY|OFN_NOCHANGEDIR;                lpumb->ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_ENABLEHOOK |                           OFN_HIDEREADONLY|OFN_ENABLETEMPLATE|OFN_NOCHANGEDIR;#ifndef WIN32                lpfnSelectDir =                  MakeProcInstance((FARPROC)SelectDirProc, hInst);#ifndef MSC                (UINT CALLBACK *)lpumb->ofn.lpfnHook = (UINT CALLBACK *)lpfnSelectDir;#else                lpumb->ofn.lpfnHook = lpfnSelectDir;#endif#else                lpumb->ofn.lpfnHook = (LPOFNHOOKPROC)SelectDirProc;#endif                lpumb->ofn.lpTemplateName = "SELDIR";   /* see seldir.dlg   */                dwCommDlgHelpId = HELPID_CHDIR; /* in case user hits "help" button */                if (GetSaveFileName(&lpumb->ofn)) /* successfully got dir name ? */                   {#ifndef WIN32                   ptr = _fstrrchr(lpumb->ofn.lpstrFile, '\\');#else                   ptr = strrchr(lpumb->ofn.lpstrFile, '\\');#endif                   if (ptr != NULL)                      lpumb->ofn.lpstrFile[(int)(ptr - lpumb->ofn.lpstrFile)] = '\0';                   lstrcpy(szUnzipToDirName, lpumb->ofn.lpstrFile); /* save result */

⌨️ 快捷键说明

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