
Опытный
 
Профиль
Группа: Участник
Сообщений: 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 }
|
|