Кнопка «Следующая» и «Предыдущая» в winAPI для перехода на следующую страницу (С++)

Я создаю приложение winAPI на С++. У меня есть фотография в области предварительного просмотра, и я хочу создать две кнопки СЛЕДУЮЩИЙ и НАЗАД, нажав на них, я перейду на следующую страницу.

Не могли бы вы подсказать, как это сделать на С++??

Нужно ли мне использовать библиотеку QT или это можно сделать с помощью встроенной функции WinAPI, например -

HWND hwndButton1 = CreateWindow(L"BUTTON",L"NEXT",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,550,800,100,30,m_hwndPreview,(HMENU)buttonid1,(HINSTANCE)GetWindowLong(m_hwndPreview, -6),NULL);

    HWND hwndButton2 = CreateWindow(L"BUTTON",L"PREVIOUS",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,650,800,100,30,m_hwndPreview,(HMENU)buttonid2,(HINSTANCE)GetWindowLong(m_hwndPreview, -6),NULL);

а затем с помощью WM_COMMAND для обоих нажатий кнопок.

Я иду правильно?

Я просто хочу, чтобы мое приложение API работало как файл с расширением .pdf... как в файлах PDF у нас есть стрелки вверх и вниз, и, щелкнув по ним, мы можем перейти на следующую страницу. В winAPIc++ я не смог найти такую ​​стрелку функция .. пожалуйста, скажите мне, есть ли какая-либо такая функция со стрелкой вверх / вниз для перехода на следующую страницу (потому что я очень меньше заинтересован в создании кнопок NEXT и PREVIOUS с помощью функции createwindow .. Это выглядит странно).


person Sss    schedule 15.07.2013    source источник
comment
Я правильно иду??? Ни за что. Если вы пишете приложения Qt, вам почти никогда не придется напрямую использовать CreateWindow или использовать сообщения Windows. Qt обрабатывает конкретные части API для вас.   -  person drescherjm    schedule 15.07.2013
comment
согласен с @drescherjm, вся цель qt - создавать кроссплатформенные программы, пусть Qt справляется с этим или вообще не использует qt   -  person Shf    schedule 15.07.2013
comment
Я думаю, что неправильно понял вопрос. Да, вы можете сделать кнопку «Далее» и «Предыдущая» с помощью WinAPI на «голом железе», но это, как правило, требует больше работы, чем использование таких фреймворков, как Qt, MFC, WTL, wxWidgets. Но да, это можно сделать. В winapi нет функции стрелки. Вам нужно будет реализовать это самостоятельно.   -  person drescherjm    schedule 15.07.2013
comment
да Drescherjm, вы правы, так что вы предлагаете мне сделать?? потому что, если мне нужны кнопки точно так же, как файлы .pdf отображаются в области предварительного просмотра (с кнопками со стрелками).. я не знаю Qt.. Можно ли сделать именно это с помощью Qt?? Не могли бы вы дать мне ссылку, как это сделать ?? Спасибо..   -  person Sss    schedule 15.07.2013
comment
Если вы не знаете Qt, я бы посоветовал создать пользовательский интерфейс с двумя кнопками — это не повод изучать Qt. Вы можете сделать это с помощью winapi, если это то, что вы знаете лучше всего и хотите научиться.   -  person drescherjm    schedule 15.07.2013
comment
Но, используя этот метод, я не думаю, что смогу получить такой прекрасный вид, как в случае с файлами .pdf на панели предварительного просмотра (как мы видим, внизу окна есть полоса, а на на панели у нас есть две стрелки (вверх/вниз), и когда мы нажимаем на них, он переворачивает страницу..используя эту кнопку, у меня будут кнопки на самом экране...Вы знаете какой-нибудь другой способ??) и большое спасибо ...   -  person Sss    schedule 15.07.2013
comment
Мой вопрос: чему ты хочешь научиться? Qt (или 1/2 дюжины других фреймворков) может создавать красивые пользовательские интерфейсы со значительно меньшими усилиями, чем программирование WinAPI на чистом железе, однако вам придется потратить значительное количество времени на изучение любого фреймворка, который вы выберете.   -  person drescherjm    schedule 15.07.2013


Ответы (3)


Вы не упомянули, какие инструменты вы используете, поэтому мы не знаем, есть ли у вас редактор ресурсов. Вы должны исследовать это на форуме, соответствующем инструментам. Если вы думаете, что написать одну строку кода для создания кнопки «очень сложно», вам нужен инструмент получше.

Если вы не хотите, чтобы кнопки отображались поверх изображения, вам нужно другое место для их размещения. Одной из распространенных возможностей является панель инструментов. Представляет собой полосу для кнопок вверху или внизу главного окна:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760435(v=vs.85).aspx

С помощью редактора ресурсов вы можете нарисовать стрелку на кнопке. Без редактора ресурсов вы можете установить для текста кнопки стрелку юникода:

SetWindowText(hwndButton1, L"\x25bc"); // стрелка вниз, используйте 25b2 для стрелки вверх

person ScottMcP-MVP    schedule 15.07.2013
comment
Спасибо, ScottMcP. Я пытаюсь создать кнопку на панели инструментов, используя ссылку msdn.microsoft.com/en-us/library/windows/desktop/ и мой код_ LRESULT tr1 =SendMessage(hWndToolbar, TB_SETIMAGELIST,(WPARAM)ImageListID,(LPARAM) g_hСписокИзображений); но когда я отлаживаю это, он дает tr1 = 0, поэтому панель инструментов муравья не отображается, и то же самое происходит с другой функцией SendMessage. Не могли бы вы сказать мне, в чем может быть проблема ?? после g_hImageList все функции отправки сообщений возвращают ноль, и ошибки компиляции нет. - person Sss; 16.07.2013
comment
Но есть кое-что, что я хочу вам сказать, что для первой компиляции выдавало ошибку, что IDM_NEW, IDM_OPEN не определены, поэтому я определил их так: #define IDM_NEW 100, но я думаю, что это не играет никакой роли в том, чтобы не отображать панель инструментов при предварительном просмотре. панель - person Sss; 16.07.2013

Большинство кнопок (и других элементов управления) создаются с помощью редактора ресурсов, помещая элементы управления в шаблон диалогового окна или ресурс панели инструментов. Если вы сделаете это, Windows создаст кнопки при создании диалогового окна или панели инструментов. Этот метод более предпочтителен, поскольку Windows регулирует размер кнопок в соответствии с используемыми настройками экрана.

Если вы не можете этого сделать, вы должны использовать CreateWindow, как вы это делаете.

person ScottMcP-MVP    schedule 15.07.2013
comment
@ ScottMcP .. Не могли бы вы однажды обратить внимание на вопрос, который я задал по этой ссылке, потому что я уверен, что у вас есть решение для него - stackoverflow.com/questions/18097646/ - person Sss; 07.08.2013

Наконец, это сделано. Я создал кнопки ни с помощью Qt, ни с помощью каких-либо createWindowEx. Лучший и простой подход - это редактор ресурсов ... просто поместите кнопку в диалоговое окно и используйте IDD_MAINDIALOG (в моем случае)

m_hwndPreview = CreateDialogParam( g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this);

а потом

BOOL CALLBACK AMEPreviewHandler::DialogProc(HWND m_hwndPreview, UINT Umsg, WPARAM wParam, LPARAM lParam) 
    { 
switch(Umsg) // handle these messages
        {  .........
}
....
}

и это сделано. Очень легкая задача.

person Sss    schedule 23.07.2013