нужно написать программу которая сделает следующее:
Create window, list all the folders and files of a system directory.
Помогите кому нетрудно, я в программинге ничего не смыслю. Могу подсказать по фотошопу или флэшу только.
нужно написать программу которая сделает следующее:
Create window, list all the folders and files of a system directory.
Помогите кому нетрудно, я в программинге ничего не смыслю. Могу подсказать по фотошопу или флэшу только.
styler,
перекиньте тогда в "компьютеры и интернет" если не трудно.
я не могу, не модерасю я! Если б мог, уже б закинул
офлайн
ФоррестГамп
Клуб друзей МТС
|
|
17224 |
22 года на сайте Город:
|
для начала просто криэйт виндов:
#include "windows.h"
HINSTANCE hInstance;
LPCTSTR lpszWndClass = "WndClass";
ATOM MyRegisterClass(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MSG msg;
HACCEL hAccelTable;
MyRegisterClass(hInstance);
if(!InitInstance(hInstance, nShowCmd))
return FALSE;
hAccelTable = LoadAccelerators(hInstance, NULL);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//MyRegisterClass()
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WARNING);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground= (HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName = NULL;
wc.lpszClassName= lpszWndClass;
return RegisterClass(&wc);
}
//InitInstance()
BOOL InitInstance(HINSTANCE hInstance, int nShowCmd)
{
HWND hWnd;
hWnd = CreateWindow(
lpszWndClass,
"MyWindow in WIN32 API",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
styler,а теперь объясни в каком виде надо вывести туда папки и каталоги системной директории...
Расслабься. Есть более простой способ (пусть ТЗ правильно ставят, если хотят большего!).
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
TCHAR sysdir[_MAX_PATH+1];
ZeroMemory(sysdir, sizeof(sysdir));
GetSystemDirectory(sysdir, _MAX_PATH);
ShellExecute( NULL, _T("open"), _T("explorer.exe"), sysdir, sysdir, SW_SHOWNORMAL);
return 0;
}
Вот и всё
JJ,
по твоему способу заданием было бы - "открыть проводником Windows системную директорию"
ИМХО не этого от него хотят
1. ...Create window
- Окно создано (ведь так?)
2. ...list all the folders and files of a system directory
- Ну и в окне отображается требуемое.
Все пункты задания - выполнены. А как - это другой вопрос.
Как в том старом анекдоте, когда мужик загадал Золотой рыбке желание, чтобы у него Х## до земли доставал. А она ему взяла, и ноги укоротила.
вобщем че-то написал:
#include "windows.h"
//глобальные переменные
HINSTANCE hInstance;
LPCTSTR lpszWndClass = "WndClass";
//прототипы функций
ATOM MyRegisterClass(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void ReadSysDir(HWND, int);
//WinMain()
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MSG msg;
HACCEL hAccelTable;
MyRegisterClass(hInstance);
if(!InitInstance(hInstance, nShowCmd))
return FALSE;
hAccelTable = LoadAccelerators(hInstance, NULL);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//MyRegisterClass()
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName= lpszWndClass;
return RegisterClass(&wc);
}
//InitInstance()
BOOL InitInstance(HINSTANCE hInstance, int nShowCmd)
{
HWND hWnd;
hWnd = CreateWindow(
lpszWndClass,
"list of all the folders and files of a system directory",
WS_OVERLAPPEDWINDOW|WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static int iVscrollPos, i;
int x;
LPTSTR lpszSystemDir, lpszOldDir, lpszFileName; // pointer to system information string
WIN32_FIND_DATA FileData;
TCHAR tchBuffer1[MAX_PATH+1]; // buffer for concatenated string
TCHAR tchBuffer2[MAX_PATH+1]; // buffer for concatenated string
TCHAR tchBuffer3[MAX_PATH+1]; // buffer for concatenated string
lpszSystemDir = tchBuffer1;
lpszOldDir = tchBuffer2;
lpszFileName = tchBuffer3;
HANDLE hSearch;
switch(msg)
{
case WM_CREATE:
//подсчитаем количество файлов для того чтобы знать
//размер полосы прокрутки
GetSystemDirectory(lpszSystemDir, MAX_PATH+1);
GetCurrentDirectory(MAX_PATH+1, lpszOldDir);
SetCurrentDirectory((LPCTSTR) lpszSystemDir);
//находим первый файл
hSearch = FindFirstFile("*.*", &FileData);
i++;
while(x!=ERROR_NO_MORE_FILES)
{
FindNextFile(hSearch, &FileData);
i++;
x = GetLastError();
}
SetCurrentDirectory((LPCTSTR) lpszOldDir);
CloseHandle(hSearch);
///////////////////////////////////////////////////
SetScrollRange (hWnd, SB_VERT, 0, i, TRUE);
SetScrollPos (hWnd, SB_VERT, iVscrollPos, TRUE);
break;
case WM_VSCROLL :
switch (LOWORD (wParam))
{
case SB_LINEUP:
iVscrollPos -= 1;
break ;
case SB_LINEDOWN:
iVscrollPos += 1;
break;
case SB_PAGEUP:
iVscrollPos -= 20;
break;
case SB_PAGEDOWN:
iVscrollPos += 20;
break;
case SB_THUMBPOSITION:
iVscrollPos = HIWORD (wParam);
break;
default:
break;
}
iVscrollPos = max (0, min (iVscrollPos, i));
if (iVscrollPos != GetScrollPos (hWnd, SB_VERT))
{
SetScrollPos (hWnd, SB_VERT, iVscrollPos, TRUE);
InvalidateRect (hWnd, NULL, TRUE);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
ReadSysDir(hWnd, iVscrollPos);
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
void ReadSysDir(HWND hWnd, int iVscrollPos)
{
LPTSTR lpszSystemDir, lpszOldDir, lpszFileName; // pointer to system information string
WIN32_FIND_DATA FileData;
TCHAR tchBuffer1[MAX_PATH+1]; // buffer for concatenated string
TCHAR tchBuffer2[MAX_PATH+1]; // buffer for concatenated string
TCHAR tchBuffer3[MAX_PATH+1]; // buffer for concatenated string
lpszSystemDir = tchBuffer1;
lpszOldDir = tchBuffer2;
lpszFileName = tchBuffer3;
HANDLE hSearch;
HDC hDC;
TEXTMETRIC tm;
hDC = GetDC(hWnd);
SetTextColor(hDC, RGB(0,200,0));
int nSize; // size of string
int i=0;
DWORD x=0, y=0;
//размеры шрифта
GetTextMetrics(hDC, &tm);
//находим системную директорию
nSize = GetSystemDirectory(lpszSystemDir, MAX_PATH+1);
//выводим ее имя
TextOut(hDC,10,i, "Системная директория: ", 22);
TextOut(hDC, 180, i, lpszSystemDir, nSize);
i+=tm.tmHeight;
SetTextColor(hDC, RGB(0,0,255));
TextOut(hDC, 10, i, "____________________________________________________________", 60);
i+=tm.tmHeight;
y=i;
//сохраняем текущую директорию
GetCurrentDirectory(MAX_PATH+1, lpszOldDir);
//устанавливаем текущей системную
SetCurrentDirectory((LPCTSTR) lpszSystemDir);
//находим первый файл
hSearch = FindFirstFile("*.*", &FileData);
SetTextColor(hDC, RGB(255,0,0));
//выводим его имя
if (y/tm.tmHeight>=iVscrollPos)
{
TextOut(hDC, 10, i, FileData.cFileName, strlen(FileData.cFileName));
i+=tm.tmHeight;
}
y+=tm.tmHeight;
//пока не заканчиваются файлы ищем их и выводим на экран
while(x!=ERROR_NO_MORE_FILES)
{
FindNextFile(hSearch, &FileData);
if (y/tm.tmHeight>=iVscrollPos)
{
TextOut(hDC, 10, i, FileData.cFileName, strlen(FileData.cFileName));
i+=tm.tmHeight;
}
y+=tm.tmHeight;
x = GetLastError();
}
//возвращаем текущую директорию
SetCurrentDirectory((LPCTSTR) lpszOldDir);
CloseHandle(hSearch);
}