
Новичок
Профиль
Группа: Участник
Сообщений: 37
Регистрация: 3.1.2010
Репутация: нет Всего: 1
|
Прграмма написана на Visual C++. Должна находить при помощи combo box папки в корневой деректории проги, и через RadiButton должна переключать отображаемый формат файлов. Вроде все сделал, но когда жму на combo box, для выбора папки прога вылетает. | Код | // WinProj001.cpp: определяет точку входа для приложения. //
#include "stdafx.h" #include "WinProj001.h" #include <windowsx.h>
#define MAX_LOADSTRING 100
#define ID_STATIC1 3001
#define ID_COMBOBOX 3002
#define ID_LISTBOX1 3003
#define ID_RADIO_BUTTON_JPG 3004 #define ID_RADIO_BUTTON_BMP 3005 #define ID_RADIO_BUTTON_GIF 3006
// Глобальные переменные: HINSTANCE hInst; // текущий экземпляр TCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка TCHAR szWindowClass[MAX_LOADSTRING]; // имя класса главного окна CHAR buff[10];
// Отправить объявления функций, включенных в этот модуль кода: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); HWND hstatic, combob, list1, radio1, radio2, radio3; HANDLE bmp1, jpg, gif, F;
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: разместите код здесь. MSG msg; HACCEL hAccelTable;
// Инициализация глобальных строк LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_WINPROJ001, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
// Выполнить инициализацию приложения: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; }
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINPROJ001));
// Цикл основного сообщения: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
return (int) msg.wParam; }
// // ФУНКЦИЯ: MyRegisterClass() // // НАЗНАЧЕНИЕ: регистрирует класс окна. // // КОММЕНТАРИИ: // // Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код // был совместим с системами Win32, не имеющими функции RegisterClassEx' // которая была добавлена в Windows 95. Вызов этой функции важен для того, // чтобы приложение получило "качественные" мелкие значки и установило связь // с ними. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINPROJ001)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+19); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WINPROJ001); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex); }
// // ФУНКЦИЯ: InitInstance(HINSTANCE, int) // // НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно. // // КОММЕНТАРИИ: // // В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также // создается и выводится на экран главное окно программы. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd;
hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd) { return FALSE; }
ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
return TRUE; }
// // ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM) // // НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне. // // WM_COMMAND - обработка меню приложения // WM_PAINT -Закрасить главное окно // WM_DESTROY - ввести сообщение о выходе и вернуться. // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc;
switch (message) { case WM_CREATE: hstatic = CreateWindow("static","Выбор папки",WS_CHILD | WS_VISIBLE,10,10,90,20,hWnd,(HMENU)ID_STATIC1,hInst,NULL); combob = CreateWindow("combobox","dirbox",WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST,10,33,90,250,hWnd,(HMENU)ID_COMBOBOX,hInst,NULL); hstatic = CreateWindow("static","Содержимое папки",WS_CHILD | WS_VISIBLE,10,60,130,20,hWnd,(HMENU)ID_STATIC1,hInst,NULL); hstatic = CreateWindow("static","Изображение",WS_CHILD | WS_VISIBLE,450,10,93,20,hWnd,(HMENU)ID_STATIC1,hInst,NULL); list1 = CreateWindow("listbox",0,WS_CHILD | WS_VISIBLE | LBS_WANTKEYBOARDINPUT | LBS_STANDARD | LBS_SORT, 10,82,130,200,hWnd,(HMENU)ID_LISTBOX1,hInst,0);
radio1 = CreateWindow("button","jpg", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 145, 120, 50, 30, hWnd, (HMENU)ID_RADIO_BUTTON_JPG, hInst, NULL); radio2 = CreateWindow("button","bmp", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 145, 160, 50, 30, hWnd, (HMENU)ID_RADIO_BUTTON_BMP, hInst, NULL); radio3 = CreateWindow("button","gif", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 145, 200, 50, 30, hWnd, (HMENU)ID_RADIO_BUTTON_GIF, hInst, NULL); hstatic = CreateWindow("static","",WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_REALSIZEIMAGE,250,35,500,500,hWnd,(HMENU)ID_STATIC1,hInst,NULL);
bmp1 = LoadImage(0,"001.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) bmp1); SendMessage(list1,LB_DIR,DDL_READWRITE,(LPARAM)".\\*.bmp");
ComboBox_Dir(combob,DDL_DIRECTORY,".\\*."); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Разобрать выбор в меню: if(wmId == ID_LISTBOX1 && wmEvent==LBN_DBLCLK) { char m[10]; int n = SendMessage(list1,LB_GETCURSEL,0,0); SendMessage(list1,LB_GETTEXT,WPARAM(n),WPARAM(m)); DeleteObject(bmp1); bmp1 = LoadImage(0,m,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) bmp1); }
if(wmId==ID_COMBOBOX || wmEvent==CBN_SELCHANGE) { char r[31],t[500],*w; strcpy(t,".\\"); ComboBox_ResetContent(combob); GetWindowText(combob,r,30); w=strtok(r,"[]"); strcat(t,w); strcat(t,"\\*."); ComboBox_Dir(combob,DDL_DIRECTORY,t); } //Переключаем Радиобаттон
if(wmId==ID_RADIO_BUTTON_JPG) { jpg = LoadImage(0,"001.jpg",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) jpg); SendMessage(list1,LB_DIR,DDL_READWRITE,(LPARAM)".\\*.jpg"); if(wmId==ID_LISTBOX1 && wmEvent==LBN_DBLCLK) { char m[10]; int n = SendMessage(list1,LB_GETCURSEL,0,0); SendMessage(list1,LB_GETTEXT,WPARAM(n),WPARAM(m)); DeleteObject(jpg); jpg = LoadImage(0,m,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) jpg); } }
if(wmId==ID_RADIO_BUTTON_BMP) { bmp1 = LoadImage(0,"001.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) bmp1); SendMessage(list1,LB_DIR,DDL_READWRITE,(LPARAM)".\\*.bmp");
if(LOWORD(wParam)==ID_LISTBOX1 && wmEvent==LBN_DBLCLK) { char m[10]; int n = SendMessage(list1,LB_GETCURSEL,0,0); SendMessage(list1,LB_GETTEXT,WPARAM(n),WPARAM(m)); DeleteObject(bmp1); bmp1 = LoadImage(0,m,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) bmp1); } }
if(wmId==ID_RADIO_BUTTON_GIF) { gif = LoadImage(0,"001.gif",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) gif); SendMessage(list1,LB_DIR,DDL_READWRITE,(LPARAM)".\\*.gif");
if(wmId==ID_LISTBOX1 && wmEvent==LBN_DBLCLK) { char m[10]; int n = SendMessage(list1,LB_GETCURSEL,0,0); SendMessage(list1,LB_GETTEXT,WPARAM(n),WPARAM(m)); DeleteObject(gif); gif = LoadImage(0,m,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SendMessage(hstatic,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM) gif); } }
switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: добавьте любой код отрисовки... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
// Обработчик сообщений для окна "О программе". INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE;
case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
|
Это сообщение отредактировал(а) DasBit - 13.1.2011, 15:43
|