Задание следующее: Создать строку ввода с числом 0 и справа от нее - маленькую вертикальную полосы прокрутки. Под ними кнопки ДА и ВЫХОД. При нажатии на верхнюю кнопку полосы число в строке ввода увеличить на единицу, а на нижнюю - уменьшить на единицу. При нажатии кнопки Да - отобразить содержимое строки ввода. В принципе всё написано, проблема лишь в изменении числа по нажатию мыши... Насколько я понимаю необходимо: 1. Записать строку в буфер 2. Преобразовать в int 3. Увеличить на 1-цу 4. Вернуть в char 5. Передать обратно в строку (проблема с этим пунктом)... Может кто-либо знает, как это реализовать... Буду очень благодарен...
| Код | #include "stdafx.h" #include "zzz.h" #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #define ID_EDIT 2999 #define ID_BUTTON 3000 static TCHAR szWindowClass[] = _T("win32app"); static TCHAR szChildClass[] = _T("child"); static TCHAR szTitle[] = _T("Win32 Guided Tour Application"); HINSTANCE hInst; int Cmd; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 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_APPLICATION)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx1 failed!"), _T("Win32 Guided Tour"), NULL); return 1; } hInst = hInstance; HWND hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800,800, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), NULL);
return 1; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
Cmd = nCmdShow; MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hEdit, hButton,hStatic,hBut; static HWND Scroll; char chBuff[80]; int x; switch (message) { case WM_CREATE: { hStatic=CreateWindow(L"static",L"Введите число и нажмите 'OK'",WS_CHILD|WS_VISIBLE|SS_CENTER,250,250,300,20,hWnd,(HMENU)0,hInst,NULL); hEdit=CreateWindow(L"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,200,400,400,30,hWnd,(HMENU)ID_EDIT,hInst,NULL);
Scroll=CreateWindow(L"scrollbar",NULL, WS_CHILD|WS_VISIBLE|SBS_VERT,620,350,30,150,hWnd,(HMENU)-1,hInst,NULL); hButton=CreateWindow(L"button",L"Выход",WS_CHILD | WS_VISIBLE |BS_DEFPUSHBUTTON, 250, 450, 100, 50, hWnd,(HMENU)ID_BUTTON, hInst, NULL); hBut=CreateWindow(L"button",L"Да",WS_CHILD | WS_VISIBLE |BS_DEFPUSHBUTTON, 450, 450, 100, 50, hWnd,(HMENU)ID_BUTTON, hInst, NULL); SetFocus(hEdit); return 0;
} case WM_COMMAND: { switch (LOWORD(wParam)) { case ID_EDIT: { if ((HIWORD(wParam))==EN_ERRSPACE) MessageBox(hWnd,L"Мало памяти",szTitle,MB_OK); return 0; } case ID_BUTTON: { SendMessage(hEdit,EM_GETLINE,0,(LPARAM)chBuff); MessageBox(hWnd, (LPCWSTR)chBuff,szTitle,MB_OK); SetWindowText(hEdit,(LPCWSTR)"\0"); SetFocus(hEdit); return 0; } case SB_LINEDOWN: { // при нажатии кнопки скролла записываем значение из строки в буфер // преобразовываем буфер в int // увеличиваем на единицу // преобразовываем в char // передаем результат строке ????????? SendMessage(hEdit,EM_GETLINE,0,(LPARAM)chBuff); // записали в буффер x=int(chBuff); // преобразовали в int while (x<10) // уыеличиваем число пока оно меньше 10 { x++;// увеличили на 1 } chBuff[80]=char (x); // перобразовали обратно в char } } return 0; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; }
return 0; }
|
|