Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Проблема с ComboBox, вылетает прога, помогите 
:(
    Опции темы
DasBit
Дата 12.1.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.