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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы вывода текста, из ID_EDIT1 
:(
    Опции темы
Promosoft
Дата 3.1.2009, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.3.2008

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



Есть простейшая программа на винапи, которая выводит поле ввода текста, кнопку и справа текст, которые содержит в себе цифру, которая вводится в то самое поле ввода.
Проблема заключается в выводе этого содержимого поля - не выводится.
Первый выделенный вариант выводит значение по умолчанию (0.0) и больше не перерисовывается, второй закоментированный вариант вообще вылетает с ошибкой. Что делаю не так, как правильно сконвертировать или что?

[/B]
Код

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>

#define ID_BUTTON 0
#define ID_EDIT1 4

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

char szAppName[] = "MenuDemo" ;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hMainWnd;  
    char szClassName[] = "MyClass";
    MSG msg;
    WNDCLASSEX wc;
    
    wc.cbSize        = sizeof(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_BTNFACE + 1);
    wc.lpszMenuName  = szAppName;
    wc.lpszClassName = szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    RegisterClassEx(&wc);    
    
    hMainWnd = CreateWindow
        (szClassName, 
        "Лаба", 
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        CW_USEDEFAULT,
        NULL, 
        NULL,
        hInstance, 
        NULL);

    ShowWindow(hMainWnd, nCmdShow); 
    UpdateWindow (hMainWnd) ; 

     while (GetMessage (&msg, NULL, 0, 0)) 
     { 
          TranslateMessage (&msg) ; 
          DispatchMessage (&msg) ; 
     } 
    
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HMENU hMenu ;
    char buf1[4]; // для hEdit1
    static HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0)), 
        hPen1 = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); // Перья рисуют функциональную область
    static int cx, cy; // Координаты окна
    static POINT apt[2]; 
    HDC hdc ;
    static HWND hbutton, hEdit1;
    PAINTSTRUCT ps;
    RECT rect; // Для рисования функциональной области
    int str1, str2, str3, str4, str5, str6;
    char strBuf1[80], strBuf2[80];
    double d=0.0;
    int a, b, c;
    char *Buff;

    switch (msg)
        {
            case WM_SIZE:
                cx = LOWORD (lParam) ;
                cy = HIWORD (lParam) ;        
            return 0 ;

            case WM_CREATE:
                // Кнопка "OK"                    
                hbutton = CreateWindow
                    ("button",
                    "OK",
                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 
                    40,  // Левые
                    80, // Верхние
                    60, // Длина
                    40,  // Высота
                    hWnd,
                    (HMENU)ID_BUTTON,
                    ((LPCREATESTRUCT) lParam) -> hInstance,
                    NULL);

                // Строка ввода числа
                hEdit1 = CreateWindow 
                    ("edit", 
                    NULL,
                    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER,
                    50, 50, 
                    50, 20,
                    hWnd, 
                    (HMENU) ID_EDIT1,
                    ((LPCREATESTRUCT) lParam) -> hInstance, 
                    NULL) ;
                
                // Помещаем в hEdit1 значение
                SendMessage (hEdit1, EM_REPLACESEL, 0, (LPARAM) "2");
            return 0;

            case WM_COMMAND:
                hMenu = GetMenu (hWnd) ;
                switch (LOWORD(wParam))
                {
                    // Если нажали на кнопку "ОК"
                    case ID_BUTTON:                                        
                        SendMessage(hEdit1,EM_GETLINE,0,(LPARAM)buf1);
    
                        a = atoi(buf1); // a
                        d = a + 0.0;
                
                        InvalidateRect(hWnd,NULL,true);
                    return 0;
                }
            return 0; // WM_COMMAND

            case WM_PAINT:            
                hdc = BeginPaint(hWnd, &ps);

                // "Текст"
                SetRect(&rect, 15,50,250,70);
                SetBkColor(hdc,RGB(224,223,227));
                SetTextColor(hdc,RGB(255,0,0));
                DrawText(hdc, "Test", -1, &rect, DT_SINGLELINE | DT_VCENTER);

                // Пишем текст //
                SetBkColor(hdc,RGB(212,208,200));
                SetTextColor(hdc,RGB(0,0,0));

                str1 = sprintf(strBuf1, "Ответ = %f", d);
                TextOut(hdc, 200, 30, strBuf1, str1);


                //Buff = "Test =";
                ////str1 = sprintf(Buff, "Ответ = ");
                //strcat(Buff, "qwe");
                //DrawText(hdc, Buff, -1, &rect, DT_CENTER);

                EndPaint(hWnd, &ps);
            return 0;

            case WM_CLOSE:
                DestroyWindow(hWnd);
            return 0;
    
            case WM_DESTROY:
                PostQuitMessage(0);
            return 0;

            default:
                return DefWindowProc(hWnd, msg, wParam, lParam);
        }
    return 0;
}

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


Эксперт
****


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

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



Promosoft, довольно сложно было понять проблему
правильно сформулированный вопрос дает 90% шанс получить на него ответ (включая ответ от самого себя)
Цитата(Promosoft @  3.1.2009,  02:56 Найти цитируемый пост)
double d=0.0;

Цитата(Promosoft @  3.1.2009,  02:56 Найти цитируемый пост)
str1 = sprintf(strBuf1, "Ответ = %f", d);

d - не статическая переменная, а используется при обработке разных сообщений
если хочешь быстро поправить, то:
Код

static double d=0.0;

а чтобы не путаться, лучше упорядочить все переменные по областям их использования:
глобальные - вынести за процедуру окна
локальные - в своих case-блоках
любые попытки оптимизации в коде при разработке программы будут только мешать 


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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.3.2008

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



GremlinProg, перечитал свой вопрос, действительно трудновато понять чего хочет автор.
Спасибо за подсказку, помогло.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1091 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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