![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
Доброе время суток. не могу запустить программу, не пойму где ошибаюсь. Программа должна создавать окно и полосы прокрутки которые должны реагировать на нажатия клавиш клавиатуры.
текст программы: #include <windows.h> BOOL RegisterClass(WNDPROC, LPCTSTR, UINT); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hInstance; char szClassName[] = "ScrollCIass"; char szTitle[] = "okno + scroll"; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevinstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; HWND hwnd; hInstance=hInst; if(!RegClass(WndProc, szClassName, COLOR_WINDOW)) return FALSE; if(!(hwnd=CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_VISIBLE, 194, 50, 246, 350, 0, 0, hInstance, NULL))) return FALSE; while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg); return msg.wParam; } BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground) { WNDCLASS wc; wc.style=wc.cbClsExtra=wc.cbWndExtr a=0; wc.lpfnWndProc=Proc; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(brBackground + 1); wc.lpszMenuName = (LPCTSTR)NULL; wc.lpszClassName=szName; return (RegisterClass(&wc) !=0); } LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { static unsigned int nyPos, nyMin, nyMax, nyPage; static SCROLLINFO siy; switch (msg) { case WM_CREATE: { nyPos=nyMin=1; nyMax=200; nyPage=10; siy.cbSize=sizeof(siy); siy.fMask=SIF_ALL; siy.nMin=nyMin; siy.nMax=nyMax; siy.nPage=nyPage; siy.nPos=nyPos; SetScrollInfo(hwnd, SB_VERT, &siy, TRUE); return 0; } case WM_VSCROLL: { switch (LOWORD(wParam)) { case SB_PAGERIGHT: { nyPos +=10; break;} case SB_LINERIGHT: { nyPos+=1; siy.nPage+=1; break;} case SB_PAGELEFT: { nyPos-=10; break;} case SB_LINELEFT: { nyPos-=1; siy.nPage-=1; break;} case SB_TOP: { nyPos=nyMin; break;} case SB_BOTTOM: { nyPos=nyMax; break;} case SB_THUMBPOSITION: case SB_THUMBTRACK: { nyPos=HIWORD(wParam); break;} } if (nyPos>nyMax) nyPos=nyMax; if (nyPos<nyMin) nyPos=nyMin; siy.nPos=nyPos; siy.fMask=SIF_POS | SIF_PAGE; if (siy.nPage<nyPage || siy.nPage>nyMax) siy.nPage=nyPage; SetScrollInfo(hwnd, SB_VERT, &siy, TRUE); return 0; } case WM_KEYDOWN: { switch (wParam) { case VK_HOME: if (HIBYTE(GetKeyState(VK_CONTROL))) SendMessage(hwnd,WM_VSCROLL, SB_TOP, 0L); break; case VK_END: if (HIBYTE(GetKeyState(VK_CONTROL))) SendMessage(hwnd,WM_VSCROLL, SB_BOTTOM, 0L); break; case VK_UP: SendMessage(hwnd, WM_VSCROLL, SB_LINELEFT, 0L); break; case VK_DOWN: SendMessage(hwnd, WM_VSCROLL, SB_LINERIGHT, 0L); break; case VK_PRIOR: SendMessage(hwnd, WM_VSCROLL, SB_PAGELEFT, 0L); break; case VK_NEXT: SendMessage(hwnd, WM_VSCROLL, SB_PAGERIGHT, 0L); break; } return 0; case WM_DESTROY:{PostQuitMessage(0); return 0;} } return DefWindowProc(hwnd, msg, wParam, lParam); } } ПОМОГИТЕ РАЗОБРАТСЯ. ПОЖАЛУСТА. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
![]()
вот так работает
Код:
Последний раз редактировалось counter; 15.11.2009 в 19:23. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
Чем компилировал?! У меня древность стоит просто Borland C++ 5.2...
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
![]()
visual studio 2008
вот те еще и колесо (авось пригодится) Код:
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
Огромное спасибо
![]() ![]() ![]() но теперь только тогда другой вопрос... как запустить это на борланде С++ 5.2 ![]() |
![]() |
![]() |
![]() |
#6 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
ну и в вижуал 2008 все равно не запускается, даже с исправлениями вот что пишет:
asm.cpp d:\visual studio 2008\projects\asm\asm\asm\asm.cpp(1 8) : error C2664: 'RegClass' : cannot convert parameter 2 from 'char [12]' to 'LPCTSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast d:\visual studio 2008\projects\asm\asm\asm\asm.cpp(2 2) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'char [12]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast d:\visual studio 2008\projects\asm\asm\asm\asm.cpp(6 6) : warning C4018: '<' : signed/unsigned mismatch d:\visual studio 2008\projects\asm\asm\asm\asm.cpp(6 6) : warning C4018: '>' : signed/unsigned mismatch что сие означает?! чего не хватает?! что не так?! |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
![]()
это связано с форматом строк, по умолчанию MVS создает юникодный проект, и функции API используемые в программе
будут вызываться в юникодном варианте CreateWindowExW - юникод CreateWindowExА - анси в настройках проекта Project - Properties - Configuration Properties - General - Character Set - No Set (или Use Multi-Byte Character Set) Последний раз редактировалось counter; 18.11.2009 в 21:10. |
![]() |
![]() |
![]() |
#8 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
вон оно в чем дело)))
вот теперь все заработало ![]() ![]() СПАСИБО ![]() |
![]() |
![]() |
![]() |
#9 |
Регистрация: 15.11.2009
Сообщений: 6
|
![]()
А вот чисто теоретически, есть какие нибудь функции по созданию скрола с автоматическим отловом нажатия клавиш клавы?!
![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Окно в Делфи | Tampl | Помощь студентам | 6 | 09.07.2009 20:54 |
Окно Help | Djem1991 | Общие вопросы Delphi | 10 | 04.02.2009 16:35 |
Окно | Артэс | Win Api | 1 | 13.06.2008 20:45 |
Окно | MadDog__ | Win Api | 0 | 17.01.2008 00:33 |
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. | RustreX | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 11.11.2007 19:28 |