|
Ниже приведен текст файла ресурсов MENU4.RC, в котором содержатся определения меню и пунктов меню, используемых для получения содержимого каталогов.
#include "windows.h" linclude "menu4.h"
Directory MENU {
POPUP "&Directory_Information"
{
MENUITEM "Directory A:", MENUITEM "Directory B:", MENUITEM "Directory C:", MENUITEM "Directory D:",
}
}
Текст приложения MENU4.C похож на тексты трех предыдущих примеров. Тем не менее, читая этот листинг, обратите внимание на подключение вертикальной полосы прокрутки.
// menu4.с
// Использование меню для получения информации о содержимом
// каталогов дисков А, В, С или D.
// Copyright (с) Chris Н. Pappas and William Н. Murray, 1994
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "menu4.h"
#define SCROLLLINES 50
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
char szProgName [ ] ="ProgName";
char szApplName[]="Directory";
char szMessage[44];
char szMyfile[10];
int sLength;
int WINAPI WinMain (HINSTANCE hlnst, HINSTANCE hPrelnst, LPSTR IpszCmdLine,int nCmdShow)
{
HWND hWnd;
MSG lpMsg;
WNDCLASS wcApp; if(!hPrelnst) {
wcApp.IpszClassName wcApp.hlnstance wcApp.lpfnWndProc wcApp.hCursor wcApp.hicon wcApp.IpszMenuName wcApp.hbrBackground wcApp.style wcApp.cbClsExtra wcApp.cbWndExtra
if(!RegisterClass(&wcApp))
return 0;
}
hWnd=CreateWindow(szProgName,"Directory Listings", WS_OVERLAPPEDWINDOW|WS_VSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, (HWND)NULL,(HMENU)NULL,
(HANDLE)hlnst,(LPSTR)NULL);
ShowWindow (hWnd, nCmdShbw);
UpdateWindow(hWnd);
…
InvalidateRect(hWnd,NULL, TRUE);
break;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//------ Начало фрагмента пользователя --
i=0;
SetCurrentDirectory(szMyfile);
hFindFile=FindFirstFile(IpszSearchFile,&ffd);
sLength=sprintf(szMessage,ffd.cFileName);
TextOut(hdc,0,charht*(i-NewVPos), szMessage,sLength);
i++;
for(;;) {
fRC=FindNextFile(hFindFile,&ffd);
if (fRC==FALSE) {
FindClose(hFindFile);
break;
}
else
FindNextFile(hFindFile, &ffd);
sLength=sprintf(szMessage,ffd.cFileName);
TextOut(hdc,0,charht*(i-NewVPos), szMessage,sLength);
i++;
}
//------ Конец фрагмента пользователя ---
ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc (hWnd,messg, wParam, lParam));
}
return(0);
}
Кроме этих трех файлов потребуется создать файл проекта для компилятора C/C++. После создания файла проекта убедитесь в том, что в список файлов для построения приложения включены файлы MENU4.RC и MENU4.C.
Файл заголовков (MENU4.H)
Файл заголовков содержит четыре неповторяющихся идентификатора и связанные с ними числа для каждого из дисков:IDM_AFILES,IDM_BFILES, IDM_CFILES и IDM_DFILES. Найдите эти идентификаторы в листинге файла MENU4.H.
Файл ресурсов (MENU4.RC)
В приложении используется одно меню, которое называется Directory_Information. Четыре пункта меню позволяют пользователю выбрать текущий каталог на диске А, В, С или D.
Файл приложения (MENU4.C)
Приложение обслуживает меню стандартным образом. Обрабатываются пять важных сообщений: WM_CREATE, WM_SIZE, WM_VSCROLL, WM_COMMAND и WM_PAINT.
При обработке сообщения WM_CREATE с помощью функции GetTextMetrics() получаются предварительные сведения о текущей высоте текста.
При обработке WM_CREATE также устанавливается начальное положение движка вертикальной полосы прокрутки и диапазон полосы прокрутки (при помощи функций SetScrollPos() и SetScrollRange(), соответственно).
При обработке сообщения WM_SIZE приложение получает информацию о текущих размерах окна. Приложение интересует только размер окна по вертикали. Эта информация необходима для организации прокрутки на страницу.
При обработке WM COMМAND запоминается выбранный из меню диск. Как указывалось ранее, данное приложение позволяет выбирать из А:, В:, С: и D:. Независимо от выбранного значения, оно заносится в переменную szMyfile. При обработке сообщения WM PAINT эта строка используется при вызове некоторых функций Windows.
Обработка сообщения WM__COMMAND заканчивается вызовом функции InvalidateRect() Напомним, что эта функция передает сообщение WM_PAINT для обновления изображения.
При обработке сообщения WM PAINT для получения списка файлов каталога используются вызовы трех функций Windows: SetCurrentDirectory(), FindFirstFile() и FindNextFile(). Текущий каталог устанавливается на основании информации, содержащейся в szMyfile.
Дата добавления: 2015-09-03; просмотров: 99 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Подготовительные работы и допуск в работе | | | Схема последовательного технологического процесса |