Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> visual C++ и WINAPI - диалоговое окно, Не вызывается диалоговое окно 
V
    Опции темы
DrWeb
Дата 25.11.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: нет
Всего: 1



Пишу программу для построения графика функции. Нужно вызвать диалоговое окно в котором можно будет изменячть параметры x. Вроде все правильно, но когда нажимаю кнопку настройки, то диалоговое окно не вызывается

Код

case WM_COMMAND://обработка команд меню и панели управления
        switch(LOWORD(wParam))    {
            ...
            case IDC_MENUITEM_INTERVAL: //это идентификатор элемента диалога - кнопки настройки
                DialogBox(NULL,(LPCTSTR)IDD_PARFUN,hWnd,(DLGPROC)AddDialog);
                InvalidateRect(hWnd,NULL,TRUE);                
                break;
            ...
            case IDC_MENUITEM_EXIT:
                    PostQuitMessage(0);
                break;
            }
        break;


вот код функции:
Код

LONG CALLBACK AddDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    char minim[20], maxim[20];
    char str[100];
    int buf;
    static HWND Emin,Emax,Smin,Smax,Bok,Bcancel,Sstyle,Sfon,LBstyle,CBfon;
    
    switch(message){
        case WM_INITDIALOG:        
        // создание элементов управления            
        Smin=CreateWindow("static","X Min :",WS_CHILD|WS_VISIBLE|SS_LEFT,20,20,80,20,hDlg,(HMENU)IDC_STATIC_MIN,NULL,NULL);
        Emin=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT,110,20,70,20,hDlg,(HMENU)IDC_EDIT_MIN,NULL,NULL);
        Smax=CreateWindow("static","X Max :",WS_CHILD|WS_VISIBLE|SS_LEFT,20,60,80,20,hDlg,(HMENU)IDC_STATIC_MAX,NULL,NULL);
        Emax=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT,110,60,70,20,hDlg,(HMENU)IDC_EDIT_MAX,NULL,NULL);
        
        Bok=CreateWindow("button","OK",WS_CHILD|WS_VISIBLE|SS_CENTER,190,20,60,25,hDlg,(HMENU)ID_BUTTON_OK,NULL,NULL);
        Bcancel=CreateWindow("button","Cancel",WS_CHILD|WS_VISIBLE|SS_CENTER,190,55,60,25,hDlg,(HMENU)ID_BUTTON_CANCEL,NULL,NULL);
        
        Sstyle=CreateWindow("static","Cтиль графика :",WS_CHILD|WS_VISIBLE|SS_LEFT,20,100,120,25,hDlg,(HMENU)IDC_STATIC_GRAFIC_STYLE,NULL,NULL);
        LBstyle=CreateWindow("listbox",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL,20,130,120,40,hDlg,(HMENU)IDC_LIST_GRAFIC_STYLE,NULL,NULL);
            
        Sfon=CreateWindow("static","Стиль фона :",WS_CHILD|WS_VISIBLE|SS_LEFT,150,100,120,25,hDlg,(HMENU)IDC_STATIC_FON_STYLE,NULL,NULL);
        CBfon=CreateWindow("combobox",NULL,WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL | CBS_DROPDOWNLIST,150,130,120,200,hDlg,(HMENU)IDC_COMBO_FON_STYLE,NULL,NULL);
        
        // перечень стилей        
        // стили графика
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_SOLID");        // (0) – сплошное перо
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_DASH");        // (1) – штриховое перо
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_DOT");        // (2) – пунктирное перо
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_DASHDOT");    // (3) – штрих–пунктирное перо
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_DASHDOTDOT");// (4) – линия, чередующая штрих и два пунктира
        SendMessage(LBstyle,LB_ADDSTRING,0,(LPARAM)"PS_NULL");        // (5) – невидимое
        //стили фона
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_HORIZONTAL");    // (0) – горизонтальная штриховка
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_VERTICAL");    // (1) – вертикальная штриховка
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_FDIAGONAL");    // (2) – 45–градусная штриховка слева направо и сверху вниз
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_BDIAGONAL");    // (3) – 45–градусная штриховка справа налево и сверху вниз
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_CROSS");        // (4) – горизонтальная и вертикальная штриховка крест-накрест
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_DIAGCROSS");    // (5) – 45–градусная штриховка крест-накрест
        SendMessage(CBfon,CB_ADDSTRING,0,(LPARAM)"HS_NULL");        // (6) – сплошная
        SendMessage(CBfon,CB_SETCURSEL,1,0);
        SendMessage(CBfon,CB_SETEXTENDEDUI,1,0);
        sprintf(minim,"%.2f",gr.GetXMIN());
        sprintf(maxim,"%.2f",gr.GetXMAX());

        SetDlgItemText(hDlg,IDC_EDIT_MIN ,minim);
        SetDlgItemText(hDlg,IDC_EDIT_MAX ,maxim);

        SendMessage(LBstyle,LB_SETCURSEL,gr.GetStyleGraf(),0);
        SendMessage(CBfon,CB_SETCURSEL,gr.GetStyleFon(),0);

        return TRUE;            
        case WM_COMMAND:
            if (LOWORD(wParam) == ID_BUTTON_OK) {
                GetDlgItemText(hDlg, IDC_EDIT_MIN , minim, sizeof(minim));
                GetDlgItemText(hDlg, IDC_EDIT_MAX , maxim, sizeof(maxim));
                gr.SetXMIN(atof(minim));
                gr.SetXMAX(atof(maxim));                

                //взять стили и шрифты
                buf=SendMessage(LBstyle,LB_GETCURSEL,0,0);
                if(buf!=LB_ERR)                    
                    gr.SetStyleGraf(buf);
                //  взять стиль фона
                buf=SendMessage(CBfon,CB_GETCURSEL,0,0);
                if(buf!=LB_ERR)
                    gr.SetStyleFon(buf);

                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            if (LOWORD(wParam) == ID_BUTTON_CANCEL) {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }        
    }
    return FALSE;
};


в чем проблема?


PM MAIL WWW   Вверх
GremlinProg
Дата 25.11.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(DrWeb @  25.11.2009,  20:45 Найти цитируемый пост)
в чем проблема?

скорее всего в этом:
Цитата(DrWeb @  25.11.2009,  20:45 Найти цитируемый пост)
DialogBox(NULL...

т.е. первым параметром поставь hInstance, например так:
Код

::DialogBox( ::GetModuleHandle( NULL ), MAKEINTRESOURCE( IDD_PARFUN ), hWnd, (DLGPROC)AddDialog );



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
DrWeb
Дата 25.11.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: нет
Всего: 1



все равно не вызывается
так пробовал
Код

::DialogBox( ::GetModuleHandle( NULL ), MAKEINTRESOURCE( IDD_PARFUN ), hWnd, (DLGPROC)AddDialog );

PM MAIL WWW   Вверх
GremlinProg
Дата 25.11.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



кстати, это так задумано:
Код

 Smin=CreateWindow("static","X Min :",WS_CHILD|WS_VISIBLE|SS_LEFT,20,20,80,20,hDlg,(HMENU)IDC_STATIC_MIN,NULL,NULL);
 Emin=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT,110,20,70,20,hDlg,(HMENU)IDC_EDIT_MIN,NULL,NULL);
 ...

т.е. все контролы, по-сути создаются вручную,
какой тогда смысл в диалоге?
только модальный цикл?

Добавлено через 1 минуту и 31 секунду
Цитата(DrWeb @  25.11.2009,  20:54 Найти цитируемый пост)
все равно не вызывается

а на сам ресурс IDD_PARFUN взгянуть можно?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
DrWeb
Дата 25.11.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: нет
Всего: 1



по заданию все элементы создавать в ручную
вот подключаемые файлы:
include.h
Код
// Файл - include.h
// Описание: - содержит подключаемые библиотеки

//блок диалога из файла:
// source.rc

#include<windows.h>
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
#include<string>
#include"resource.h"
using namespace std;

//+lab6
// идентификаторы для эллемнтов диалога
#define IDC_EDIT_MIN                    1001
#define IDC_EDIT_MAX                    1002
#define ID_BUTTON_OK                    1003
#define ID_BUTTON_CANCEL                1004
#define IDC_STATIC_MAX                  1005
#define IDC_STATIC_MIN                  1006
#define IDC_STATIC_GRAFIC_STYLE         1007
#define IDC_STATIC_FON_STYLE            1008
#define IDC_LIST_GRAFIC_STYLE           1009
#define IDC_COMBO_FON_STYLE                1010

#define IDC_MENUITEM_GRAFICCOLOR        1021
#define IDC_MENUITEM_AXISCOLOR            1022
#define IDC_MENUITEM_FONCOLOR            1023
#define IDC_MENUITEM_FONT                1024
#define IDC_MENUITEM_INTERVAL            1025
#define IDC_MENUITEM_SAVE                1026
#define IDC_MENUITEM_LOAD                1027
#define IDC_MENUITEM_EXIT                1028



resource.h
Код
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by 111.rc
//
#define IDD_PARFUN                      101

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         40002
#define _APS_NEXT_SYMED_VALUE           103
#endif
#endif



PM MAIL WWW   Вверх
GremlinProg
Дата 25.11.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



ресурс IDD_PARFUN, т.е. сам диалог, расположен в файле с расширением *.rc,
не понял в каком именно, но я вижу 2 варианта: 111.rc и source.rc, где-то там

если все вновь создаваемые компоненты ( IDC_EDIT_MIN, IDC_EDIT_MAX и т.п. ) уже на диалоге,
то, видимо, для разрешения конфликта, нужно удалить из ресурса дубли


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
DrWeb
Дата 25.11.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: нет
Всего: 1



Ниче не выходит.ладно - буду чето думать
Спасибо за советы
PM MAIL WWW   Вверх
xvr
Дата 26.11.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



А что возвращает DialogBox и GetLastError?

PM MAIL   Вверх
Earnest
Дата 27.11.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(GremlinProg @  25.11.2009,  19:54 Найти цитируемый пост)
а на сам ресурс IDD_PARFUN взгянуть можно? 

Скорее всего, нет такого ресурса, один идентификатор. 
Если задание состоит в том, чтобы все контролы добавить руками, то рассмотри возможность создания шаблона DLGTEMPLATE, а затем вызывай диалог через DialoBoxIndirect. Действительно, зачем пустой ресурс диалога...



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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