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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual C/C++/Win32API]Диалоговое окно 
:(
    Опции темы
toxx
Дата 23.11.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пишу программу калькулятор за основу взял программу из книги Ч.Петзолд(Програvмирование для Win95)
Столкнулся с такой проблемой создаю диалоговое окно и хочу с помощью переключателей(AUTORADIOBUTTON)
переключать калькулятор в разные системы счисления OCT DEC HEX.Как это лучше сделать подскажите в виде кода/совета.Читал несколько раз пробовал разные методы никак не пойму что нужно.

Код

#include <windows.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//#include "popmenu.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//LRESULT CALLBACK ScrollProc(HWND, UINT, WPARAM, LPARAM);
//WNDPROC fnOldScr[3];
//HWND hwndScrol[3], hwndLabel[3], hwndValue[3], hwndRect;
//int color[3], iFocus;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static char szAppName[] = "HexCalc";
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;
    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = DLGWINDOWEXTRA;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(hInstance, szAppName);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground =(HBRUSH)(COLOR_WINDOW+0 );
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon(hInstance, szAppName);
    RegisterClassEx(&wndclass);
    hwnd = CreateDialog(hInstance, szAppName, 0, NULL);

    /*for(int i = 0; i < 3; i++)
            hwndScrol[i] = CreateWindow("BUTTON", NULL,
                                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                                0, 0, 0, 0,
                                hwnd,(HMENU) i, hInstance, NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);*/
    ShowWindow(hwnd, iCmdShow);
    while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    return msg.wParam;
}
void ShowNumber(HWND hwnd, UINT iNumber)
{
    char szBuffer[20];
    SetDlgItemText(hwnd, VK_ESCAPE, strupr(ltoa(iNumber, szBuffer, 16)));
}
DWORD CalcIt(UINT iFirstNum, int iOperation, UINT iNum)
{
    switch(iOperation)
        {
            case '=' : return iNum;
            case '+' : return iFirstNum + iNum;
            case '-' : return iFirstNum - iNum;
            case '*' : return iFirstNum * iNum;
            default : return 0;
        }
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static BOOL bNewNumber = TRUE;
    static int iOperation = '=';
    static UINT iNumber, iFirstNum;
    HWND hButton;
    switch(iMsg)
        {
            case WM_KEYDOWN : // left arrow --> backspace
                if(wParam != VK_LEFT)
            break;
            wParam = VK_BACK;// fall through
            case WM_CHAR :
                if((wParam = toupper(wParam)) == VK_RETURN)
                wParam = '=';
                hButton = GetDlgItem(hwnd, wParam);
                if(hButton != NULL)
                    {
                        SendMessage(hButton, BM_SETSTATE, 1, 0);
                        SendMessage(hButton, BM_SETSTATE, 0, 0);
                    }
                    else
                        {
                            MessageBeep(0);
                            break;
                        }// fall through
            /*case WM_SETFOCUS :
                SetFocus(hwndScrol[iFocus]);
            return 0;*/
            case WM_COMMAND :
                SetFocus(hwnd);
                if(LOWORD(wParam) == VK_BACK) // backspace
                    ShowNumber(hwnd, iNumber /= 16);
                        else if(LOWORD(wParam) == VK_ESCAPE) // escape
                            ShowNumber(hwnd, iNumber = 0);
                                else if(isxdigit(LOWORD(wParam))) // hex digit
                                    {
                                        if(bNewNumber)
                                            {
                                                iFirstNum = iNumber;
                                                iNumber = 0;
                                            }
                bNewNumber = FALSE;
                if(iNumber <= UINT_MAX >> 4)
                    ShowNumber(hwnd, iNumber = 16 * iNumber + wParam -
                        (isdigit(wParam) ? '0' : 'A' - 10));
                            else
                                MessageBeep(0);
                                    }
                            else // operation
                                {
                                    if(!bNewNumber)
                                        ShowNumber(hwnd, iNumber =
                                            CalcIt(iFirstNum, iOperation, iNumber));
                                    bNewNumber = TRUE;
                                    iOperation = LOWORD(wParam);
                                }
                switch(LOWORD(wParam))
                {    
                    case 112 :
                    case 113 :
                    case 114 :
                            CheckRadioButton(hwnd, 10, 17, LOWORD
                                                (wParam));
                }
            return 0;

            case WM_DESTROY :
                PostQuitMessage(0);
            return 0;
}
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}



Код

#include <windows.h>
HexCalc ICON favicon.ico
HexCalc DIALOG 32768, 0, 150, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "HexCalc"
CAPTION "Hex Calculator"
{
    PUSHBUTTON "D", 68, 8, 24, 14, 14,WS_BORDER
    PUSHBUTTON "A", 65, 8, 40, 14, 14,WS_BORDER
    PUSHBUTTON "7", 55, 8, 56, 14, 14,WS_BORDER
    PUSHBUTTON "4", 52, 8, 72, 14, 14,WS_BORDER
    PUSHBUTTON "1", 49, 8, 88, 14, 14,WS_BORDER
    PUSHBUTTON "0", 48, 8, 104, 14, 14,WS_BORDER
    PUSHBUTTON "0", 27, 26, 4, 50, 14,WS_BORDER
    //CONTROL text, id, class, style, x, y, width, height
    //PUSHBUTTON text, id, x, y, width, height [, style]
    PUSHBUTTON "E", 69, 26, 24, 14, 14,WS_BORDER
    PUSHBUTTON "B", 66, 26, 40, 14, 14,WS_BORDER
    PUSHBUTTON "8", 56, 26, 56, 14, 14,WS_BORDER
    PUSHBUTTON "5", 53, 26, 72, 14, 14,WS_BORDER
    PUSHBUTTON "2", 50, 26, 88, 14, 14,WS_BORDER
    PUSHBUTTON "Back", 8, 26, 104, 32, 14,WS_BORDER
    PUSHBUTTON "C", 67, 44, 40, 14, 14,WS_BORDER
    PUSHBUTTON "F", 70, 44, 24, 14, 14,WS_BORDER
    PUSHBUTTON "9", 57, 44, 56, 14, 14,WS_BORDER
    PUSHBUTTON "6", 54, 44, 72, 14, 14,WS_BORDER
    PUSHBUTTON "3", 51, 44, 88, 14, 14,WS_BORDER
    PUSHBUTTON "+", 43, 62, 24, 14, 14,WS_BORDER
    PUSHBUTTON "-", 45, 62, 40, 14, 14,WS_BORDER
    PUSHBUTTON "*", 42, 62, 56, 14, 14,WS_BORDER
    PUSHBUTTON "/", 47, 62, 72, 14, 14,WS_BORDER
    PUSHBUTTON "==", 61, 62, 104, 32, 14,WS_BORDER
    CONTROL "", -1, "BUTTON", BS_GROUPBOX, 98, 14, 45, 60
    CONTROL "&OCT", 7, "BUTTON", BS_AUTORADIOBUTTON|WS_GROUP, 100, 21, 40, 20
    CONTROL "&DEC", 8, "BUTTON", BS_AUTORADIOBUTTON, 100, 37, 40, 20
    CONTROL "&HEX", 9, "BUTTON", BS_AUTORADIOBUTTON, 100, 53, 40, 20
}



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


666
**


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

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



Лучше спросить в этом форуме.
PM MAIL   Вверх
Carlos0N
Дата 29.11.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а ещё лучше не писать на этом дурацком widows аpi =))
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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