home *** CD-ROM | disk | FTP | other *** search
- /*========================================================*/
- /* MH.C */
- /* (C) 1993 Michael Hoffmeister &DMV-Verlag */
- /* Demonstration für die Nutzung von Bitmaps in der */
- /* Menüleiste von OS/2-Programmen */
- /* Compiler: Microsoft C 6.0 */
- /*========================================================*/
-
- #define INCL_PM
- #define INCL_WIN
- #define INCL_GPI
- #define INCL_DOS
- #define INCL_DEV
- #define INCL_BASE
-
-
- #include <os2.h>
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include "mh.h"
-
- struct Lade_struktur
- {
- CHAR szName[13];
- CHAR szEndung[5];
- BOOL fGeladen;
- } Lade_struct;
-
- USHORT cdecl main(VOID);
- MRESULT EXPENTRY Programm(HWND, USHORT, MPARAM, MPARAM);
- MRESULT EXPENTRY DateiLaden(HWND, USHORT, MPARAM, MPARAM);
- VOID Verzeichnisse(HWND);
- VOID Dateien(HWND, PSZ);
- VOID Pfadname(HWND);
- VOID Laufwerk(PSZ);
- BOOL DateiVorhanden(CHAR[13]);
-
-
- USHORT main(void)
- {
- HAB hab;
- HMQ hmq;
- QMSG qmsg;
- HWND hwnd, hwndFenster;
- ULONG ulFlags = FCF_TITLEBAR | FCF_SYSMENU |
- FCF_SIZEBORDER | FCF_MINMAX |
- FCF_BORDER | FCF_MENU | FCF_ACCELTABLE |
- FCF_ICON;
- ULONG ulTyp = WS_VISIBLE | FS_ACCELTABLE | FS_ICON;
- static CHAR szFenster[] = "Fenster-Klasse";
-
- hab = WinInitialize(0);
- hmq = WinCreateMsgQueue(hab, 0);
- WinRegisterClass(hab, szFenster, Programm,
- CS_SIZEREDRAW, 0);
- hwnd = WinCreateStdWindow(HWND_DESKTOP, ulTyp, &ulFlags,
- szFenster, "MH \7 (c) Michael Hoffmeister",
- 0L, (HMODULE) NULL, ID_MENU, &hwndFenster);
- WinSetWindowPos(hwnd, NULL, 40, 20, 555, 420, SWP_SIZE |
- SWP_MOVE | SWP_SHOW | SWP_ACTIVATE);
- while (WinGetMsg(hab, &qmsg, NULL, 0, 0))
- WinDispatchMsg(hab, &qmsg);
- WinDestroyWindow(hwnd);
- WinDestroyMsgQueue(hmq);
- WinTerminate(hab);
- return 0;
- }
-
- MRESULT EXPENTRY Programm(HWND hwnd, USHORT msg,
- MPARAM mp1, MPARAM mp2)
- {
- HPS hps;
- static POINTL ptl;
- static RECTL rcl;
-
- switch (msg)
- {
- case WM_PAINT:
- hps = WinBeginPaint(hwnd, NULL, NULL);
- GpiErase(hps);
- WinQueryWindowRect(hwnd, &rcl);
- ptl.x = 20;
- ptl.y = rcl.yTop/2;
- if (Lade_struct.fGeladen == TRUE)
- {
- GpiCharStringAt(hps, &ptl,
- strlen(Lade_struct.szName),
- Lade_struct.szName);
- Lade_struct.fGeladen = FALSE;
- }
- WinEndPaint(hps);
- return 0L;
-
- case WM_COMMAND:
- switch (COMMANDMSG(&msg)->cmd)
- {
- case ID_START:
- strcpy(Lade_struct.szEndung, "*.*");
- WinDlgBox(HWND_DESKTOP, hwnd, DateiLaden,
- (HMODULE) NULL, ID_MH_LADEN, NULL);
- WinInvalidateRect(hwnd, NULL, FALSE);
- return 0L;
- }
- return 0L;
-
- case WM_CREATE:
- hps = WinGetPS(hwnd);
- WinReleasePS(hps);
- return 0L;
-
- case WM_HELP:
- WinMessageBox(HWND_DESKTOP, hwnd,
- "Hilfstext.\n \n",
- "HILFE aus dem Hauptprogramm", 0,
- MB_OK | MB_ICONASTERISK |
- MB_SYSTEMMODAL);
- return 0L;
-
- default:
- break;
- }
- return WinDefWindowProc(hwnd, msg, mp1, mp2);
- }
-
-
- MRESULT EXPENTRY DateiLaden(HWND hwnd, USHORT msg,
- MPARAM mp1, MPARAM mp2)
- {
- static SHORT sDatei, sVerzeichnis, sZahl;
- static CHAR szRechts[13], szLinks[13], szEndung[5];
- static NPBYTE npbGesamt;
- static BOOL fWahl;
- static MRESULT mres;
-
- strcpy(szEndung, Lade_struct.szEndung);
- sZahl = 30;
- fWahl = TRUE;
-
- switch (msg)
- {
- case WM_INITDLG:
- Pfadname(hwnd);
- Verzeichnisse(hwnd);
- Dateien(hwnd, szEndung);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX, LM_SELECTITEM,
- MPFROMSHORT(sVerzeichnis),
- MPFROMSHORT(fWahl));
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX, LM_SELECTITEM,
- MPFROMSHORT(sDatei),
- MPFROMSHORT(fWahl));
- WinPostMsg(hwnd, WM_CONTROL,
- MPFROM2SHORT(0, EN_CHANGE),NULL);
- return 0L;
-
- case WM_HELP:
- WinMessageBox(HWND_DESKTOP, hwnd, "Hilfstext.\n \n",
- "HILFE aus der Dialogbox", 0,
- MB_OK | MB_ICONASTERISK | MB_SYSTEMMODAL);
- return 0L;
-
- case WM_CONTROL:
- WinQueryDlgItemText(hwnd, ID_MH_AD, strlen(szRechts),
- (PSZ) szRechts);
-
- switch (SHORT2FROMMP(mp1))
- {
- case LN_SELECT:
- switch (SHORT1FROMMP(mp1))
- {
- case ID_MH_D_BOX:
- mres = WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_QUERYSELECTION,
- MPFROMSHORT(sDatei),
- 0L);
- sDatei = MAKETYPE(mres, SHORT);
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(sDatei,
- sZahl),
- MPFROMP(szRechts));
- WinSetDlgItemText(hwnd, ID_MH_AD,
- (PSZ) szRechts);
- return 0L;
-
- case ID_MH_V_BOX:
- mres = WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_QUERYSELECTION,
- MPFROMSHORT(
- sVerzeichnis), 0L);
- sVerzeichnis = MAKETYPE(mres, SHORT);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(sVerzeichnis,
- sZahl), MPFROMP(szLinks));
- sprintf(npbGesamt, "\\%s\\%s", szLinks,
- szEndung);
- WinSetDlgItemText(hwnd, ID_MH_AD, npbGesamt);
- return 0L;
- }
- return 0L;
-
- case LN_ENTER:
- switch (SHORT1FROMMP(mp1))
- {
- case ID_MH_D_BOX:
- mres = WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_QUERYSELECTION,
- MPFROMSHORT(sDatei),
- 0L);
- sDatei = MAKETYPE(mres, SHORT);
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(sDatei, sZahl),
- MPFROMP(szRechts));
- if (DateiVorhanden(szRechts))
- {
- strcpy(Lade_struct.szName, szRechts);
- Lade_struct.fGeladen = TRUE;
- }
- else
- {
- Lade_struct.fGeladen = FALSE;
- WinMessageBox(HWND_DESKTOP, hwnd,
- "Diese Datei existiert nicht.\n \n",
- "Fehler aufgetreten", 0, MB_OK |
- MB_ICONASTERISK | MB_SYSTEMMODAL);
- }
- WinDismissDlg(hwnd, ID_MH_ABBRUCH);
- return 0L;
-
- case ID_MH_V_BOX:
- mres = WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_QUERYSELECTION,
- MPFROMSHORT(
- sVerzeichnis), 0L);
- sVerzeichnis = MAKETYPE(mres, SHORT);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_QUERYITEMTEXT,
- MPFROM2SHORT(sVerzeichnis,
- sZahl),
- MPFROMP(szLinks));
- Laufwerk(szLinks);
- Pfadname(hwnd);
- WinEnableWindowUpdate(WinWindowFromID(hwnd,
- ID_MH_V_BOX), FALSE);
- WinEnableWindowUpdate(WinWindowFromID(hwnd,
- ID_MH_D_BOX), FALSE);
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_DELETEALL, 0L, 0L);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_DELETEALL, 0L, 0L);
- Verzeichnisse(hwnd);
- Dateien(hwnd, szEndung);
- WinShowWindow(WinWindowFromID(hwnd,
- ID_MH_V_BOX), TRUE);
- WinShowWindow(WinWindowFromID(hwnd,
- ID_MH_D_BOX), TRUE);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_SELECTITEM,
- MPFROMSHORT(0),
- MPFROMSHORT(fWahl));
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX,
- LM_SELECTITEM,
- MPFROMSHORT(0),
- MPFROMSHORT(fWahl));
- return 0L;
- }
- return 0L;
- }
- return 0L;
-
- case WM_COMMAND:
- switch (SHORT1FROMMP(mp1))
- {
- case ID_MH_OK:
- WinQueryDlgItemText(hwnd, ID_MH_AD, 15,
- (PSZ)szRechts);
- if (DateiVorhanden(szRechts))
- {
- strcpy(Lade_struct.szName, szRechts);
- Lade_struct.fGeladen = TRUE;
- WinDismissDlg(hwnd, TRUE);
- }
- else
- {
- Lade_struct.fGeladen = FALSE;
- WinMessageBox(HWND_DESKTOP, hwnd,
- "Sie können kein Verzeichnis laden.\n \n",
- "Fehler aufgetreten", 0, MB_OK |
- MB_ICONASTERISK | MB_SYSTEMMODAL);
- }
- return 0L;
-
- case ID_MH_HILFE:
- WinMessageBox(HWND_DESKTOP, hwnd,
- "Hilfstext.\n \n",
- "HILFE aus der Dialogbox", 0,
- MB_OK | MB_ICONASTERISK |
- MB_SYSTEMMODAL);
- return 0L;
-
- case ID_MH_ABBRUCH:
- Lade_struct.fGeladen = FALSE;
- WinDismissDlg(hwnd, FALSE);
- return 0L;
- }
- return 0L;
-
- default:
- break;
- }
- return(WinDefDlgProc(hwnd, msg, mp1, mp2));
- }
-
-
- VOID Verzeichnisse(HWND hwnd)
- {
- FILEFINDBUF findPuffer;
- HDIR hdirPfad = HDIR_CREATE;
- USHORT usZaehler, usAttr, i, b;
- CHAR pszLaufwerk[4];
- usZaehler = 1;
- DosFindFirst("*.*", &hdirPfad, FILE_DIRECTORY,
- &findPuffer, sizeof(findPuffer),
- &usZaehler, 0L);
- do
- {
- DosQFileMode(findPuffer.achName, &usAttr, 0L);
- if (strcmp(findPuffer.achName,"."))
- if (usAttr == FILE_DIRECTORY)
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX,
- LM_INSERTITEM,
- MPFROM2SHORT(LIT_SORTASCENDING,
- 0), MPFROMP(findPuffer.achName));
- }
- while (DosFindNext(hdirPfad, &findPuffer,
- sizeof(findPuffer), &usZaehler) == 0);
- DosPhysicalDisk(1, (PBYTE) &b, 2, NULL, 0);
- for (i=0; i<b; i++)
- { sprintf(pszLaufwerk, "[%c:]", i+67);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX, LM_INSERTITEM,
- MPFROM2SHORT(LIT_SORTASCENDING, 0),
- MPFROMP(pszLaufwerk));
- }
- DosDevConfig(&b, DEVINFO_FLOPPY, 0);
- for (i=0; i<b; i++)
- {
- sprintf(pszLaufwerk, "[%c:]", i+65);
- WinSendDlgItemMsg(hwnd, ID_MH_V_BOX, LM_INSERTITEM,
- MPFROM2SHORT(LIT_SORTASCENDING,0),
- MPFROMP(pszLaufwerk));
- }
- }
-
-
- VOID Dateien(HWND hwnd, PSZ szEndung)
- {
- FILEFINDBUF findPuffer;
- HDIR hdirPfad = HDIR_CREATE;
- USHORT usZaehler, usAttr;
- static CHAR pszPuffer[13];
- usZaehler = 1;
- strcpy(findPuffer.achName, "");
- DosFindFirst(szEndung, &hdirPfad, FILE_NORMAL,
- &findPuffer, sizeof(findPuffer), &usZaehler,
- 0L);
- do
- {
- strcpy(pszPuffer, findPuffer.achName);
- DosQFileMode(pszPuffer, &usAttr, 0L);
- if (usAttr != FILE_DIRECTORY)
- WinSendDlgItemMsg(hwnd, ID_MH_D_BOX, LM_INSERTITEM,
- MPFROM2SHORT(LIT_SORTASCENDING, 0),
- MPFROMP(pszPuffer));
- }
- while (DosFindNext(hdirPfad, &findPuffer,
- sizeof(findPuffer), &usZaehler) == 0);
- }
-
-
- VOID Pfadname(HWND hwnd)
- {
- ULONG ulLaufwerke;
- USHORT usPfad, usPLatte;
- HHEAP hHeap;
- NPBYTE npbyteObjekt, npbyteVerzeichnis;
- usPfad = 0;
- DosQCurDisk(&usPLatte, &ulLaufwerke);
- DosQCurDir(usPLatte, NULL, &usPfad);
- hHeap = WinCreateHeap(0,5 * (usPfad+30), usPfad + 30, 0,
- 0, HM_MOVEABLE);
- npbyteObjekt = WinAllocMem(hHeap, usPfad);
- npbyteVerzeichnis = WinAllocMem(hHeap, usPfad + 30);
- DosQCurDir(usPLatte, npbyteObjekt, &usPfad);
- sprintf(npbyteVerzeichnis, "%c:\\%s", usPLatte + 64,
- npbyteObjekt);
- WinSetDlgItemText(hwnd, ID_MH_AV, npbyteVerzeichnis);
- WinDestroyHeap(hHeap);
- }
-
- VOID Laufwerk(PSZ pszText2)
- {
- ULONG ulLaufwerke;
- USHORT usPfad, usPLatte, i;
- PSZ pszPfad;
- SEL selPfad;
- if (pszText2[0] == '[')
- {
- i = toascii((int) pszText2[1]) - 64;
- DosSelectDisk(i);
- DosChDir("\\", 0L);
- }
- else
- {
- usPfad = 0;
- DosQCurDisk(&usPLatte, &ulLaufwerke);
- DosQCurDir(usPLatte, NULL, &usPfad);
- DosAllocSeg(usPfad, &selPfad, SEG_NONSHARED);
- pszPfad = MAKEP(selPfad, 0);
- DosQCurDir(usPLatte, pszPfad, &usPfad);
- DosChDir(pszText2, 0L);
- }
- }
-
- BOOL DateiVorhanden(CHAR pszDatei[13])
- {
- FILEFINDBUF findPuffer;
- HDIR hdirPfad = HDIR_CREATE;
- USHORT usZaehler;
- usZaehler = 1;
- strcpy(findPuffer.achName, " ");
- DosFindFirst("*.*", &hdirPfad, FILE_NORMAL, &findPuffer,
- sizeof(findPuffer), &usZaehler, 0L);
- do
- {
- if (strcmp(pszDatei, findPuffer.achName) == 0)
- return TRUE;
- }
- while (DosFindNext(hdirPfad, &findPuffer,
- sizeof(findPuffer), &usZaehler) == 0);
- return FALSE;
- }
-
- /*========================================================*/
- /* Ende von MH.C */
-