【问题标题】:Next and previous control button in winAPI to go to next page (c++)winAPI中的下一个和上一个控制按钮转到下一页(c ++)
【发布时间】:2013-07-13 10:29:14
【问题描述】:

我正在用 c++ 创建一个 winAPI 应用程序我在预览窗格中有一张照片,我想创建两个按钮 NEXT 和 PREVIOUS 点击它们我将转到下一页。

您能告诉我如何在 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++ 中我找不到任何这样的箭头功能..请告诉我是否有任何这样的向上/向下箭头功能可以转到下一页(因为我对使用 createwindow 功能创建 NEXT 和 PREVIOUS 按钮不太感兴趣。看起来很奇怪)。

【问题讨论】:

  • “我走对了吗???”没门。如果您正在编写 Qt 应用程序,您几乎不需要直接使用 CreateWindow 或使用 windows 消息。 Qt 为您处理 API 特定部分。
  • 同意@drescherjm,这是qt的全部目的-创建跨平台程序,让Qt处理或者根本不使用qt
  • 我想我误解了这个问题。是的,您可以使用裸机 winapi 制作下一个和上一个按钮,但这通常比使用 Qt、MFC、WTL、wxWidgets 等框架需要更多工作。但是是的,它可以做到。 winapi中没有箭头功能。您需要自己实现。
  • 是的 Drescherjm,你是对的,你建议我怎么做??因为如果我想要按钮完全按照 .pdf 文件在预览窗格中显示的方式(带有箭头按钮)..我不知道 Qt ..是否可以使用 Qt 做到这一点?你能给我一些链接吗?谢谢..
  • 如果您不了解 Qt,我建议创建一个带有 2 个按钮的 ui 并不是学习 Qt 的好理由。如果这是您最了解并想学习的,您可以使用 winapi 完成此操作。

标签: qt winapi button buttonclick back-button-control


【解决方案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
        {  .........
}
....
}

然后就完成了。非常简单的任务。

【讨论】:

    【解决方案2】:

    您没有提到您使用的是什么工具,所以我们不知道您是否有资源编辑器。您应该在适合这些工具的论坛中进行研究。如果您认为编写一行代码来创建按钮“非常复杂”,那么您需要一个更好的工具。

    如果您不希望按钮出现在图片顶部,那么您需要另一个位置来放置它们。一种常见的可能性是工具栏。它是主窗口顶部或底部的按钮条:

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

    使用资源编辑器,您可以在按钮上绘制箭头。如果没有资源编辑器,您可以将按钮文本设置为 unicode 箭头:

    SetWindowText(hwndButton1, L"\x25bc"); // 向下箭头,向上箭头使用 25b2

    【讨论】:

    • 感谢 ScottMcP .. 我正在尝试使用引用 msdn.microsoft.com/en-us/library/windows/desktop/… 的工具栏创建按钮,我的代码是_LRESULT tr1 =SendMessage(hWndToolbar, TB_SETIMAGELIST,(WPARAM)ImageListID,(LPARAM)g_hImageList) ;但是当我调试它时,它给出了 tr1 = 0,因此不显示 ant 工具栏,其他 SendMessage 函数的情况也是如此。你能告诉我可能是什么问题吗?在 g_hImageList 之后,所有发送消息函数都返回零并且没有编译错误..
    • 但是有一些事情我想告诉你第一次编译它给出的错误是 IDM_NEW,IDM_OPEN 未定义所以我像这样定义它们#define IDM_NEW 100 但我认为它没有在预览窗格中不显示工具栏的作用
    【解决方案3】:

    大多数按钮(和其他控件)是使用资源编辑器创建的,将控件放置在对话框模板或工具栏资源上。如果您这样做,Windows 将在您创建对话框或工具栏时创建按钮。这种方法更受欢迎,因为 Windows 会根据使用的屏幕设置调整按钮的大小。

    如果你不能这样做,你必须像你一样使用 CreateWindow。

    【讨论】:

    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 2012-10-25
    • 2012-03-08
    • 1970-01-01
    • 2013-02-01
    • 2013-12-14
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多