2013-07-15 3 views
1

Я создаю приложение winAPI в C++ У меня есть фотография в области предварительного просмотра, и я хочу создать две кнопки NEXT и PREVIOUS при нажатии на них. Я пойду на на следующей странице.Следующая и предыдущая кнопка управления в winAPI для перехода на следующую страницу (C++)

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

Нужно ли мне использовать QT libraray или это может быть сделано помощью встроенной функции 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 .. Это выглядит странно).

+1

«Я иду вправо ???» Ни за что. Если вы пишете приложения Qt, вам почти не нужно напрямую использовать CreateWindow или использовать сообщения Windows. Qt обрабатывает определенные вами части API. – drescherjm

+0

согласны с @drescherjm, это целая цель qt - создавать кросс-платформенные программы, пусть Qt-дескриптор, который или вообще не использует qt – Shf

+0

Я думаю, что неправильно понял вопрос.Да, вы можете сделать следующую и предыдущую кнопку, используя голый металлический winapi, но обычно это больше, чем использование фреймворков, таких как Qt, MFC, WTL, wxWidgets. Но да, это можно сделать. В winapi нет функции стрелок. Вам нужно будет реализовать это самостоятельно. – drescherjm

ответ

1

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

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

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

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

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

+0

Спасибо ScottMcP .. Я пытаюсь создать панель инструментов usiong с кнопкой refernce http: // msdn.microsoft.com/en-us/library/windows/desktop/hh298381(v=vs.85).aspx, а мой код is_ LRESULT tr1 = SendMessage (hWndToolbar, TB_SETIMAGELIST, (WPARAM) ImageListID, (LPARAM) g_hImageList); но когда я отлаживаю это, он дает tr1 = 0, следовательно, не показывает панель инструментов инструмента, и это же условие с другой функцией SendMessage. Не могли бы вы рассказать мне, что может быть проблемой? после g_hImageList все функции отправки сообщения возвращают ноль и нет ошибки компиляции. – Sss

+0

Но есть кое-что, что я хочу рассказать yo, что для первого компилятора он выдавал ошибку, что IDM_NEW, IDM_OPEN не определены, поэтому я определил их как это #define IDM_NEW 100, но я думаю, что он не играет никакой роли в том, чтобы не отображать панель инструментов в области предварительного просмотра – Sss

1

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

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

+0

@ ScottMcP .. Не могли бы вы однажды обратить внимание на то, что я спросил об этой ссылке, потому что я уверен, что у вас есть решение для этого - http://stackoverflow.com/questions/18097646/how-to-create-a- strip-to-keep-button-on-it-using-resource-editor-in-visual-c? noredirect = 1 # comment26491888_18097646 – Sss

1

Наконец-то это сделано .. Я создал кнопки, не используя 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 
     { ......... 
} 
.... 
} 

и то сделано. Очень простая задача.