【问题标题】:WinAPI create window + child windows, process a button press?WinAPI创建窗口+子窗口,处理按钮按下?
【发布时间】:2016-06-12 10:04:20
【问题描述】:

我是 WinApi 的新手,我希望在我的程序中创建一个简单的窗口,其中包含一个空白 父窗口和两个较小的子按钮 "button1" & “按钮 2”。使用此按钮,我希望将 bool 值从 false 更改为 true,反之亦然,但是我看到的几乎所有示例都很难理解,似乎您必须返回 MSG某种我不知道如何处理的价值。

我在下面有一个伪代码,说明我正在尝试做的事情,我让 cmets 解释我每时每刻想要做什么,我的做法是否正确?:

#include <windows.h>

static int buildwindow(){

    MSG msg;

    //create parent window
    HWND hWnd = CreateWindow(TEXT("scrollbar"), TEXT("Parent"), WS_VISIBLE | WS_POPUP,
    10, 10, 800, 500, NULL, NULL, NULL,  NULL);

    //create child window
    HWND hWnd1 = CreateWindow(TEXT("button"), TEXT("button1"), WS_CHILD|WS_VISIBLE | WS_POPUP,
    10, 10, 80, 25, hWnd, NULL, NULL,  NULL);

    //create child window2
    HWND hWnd2 = CreateWindow(TEXT("button"), TEXT("button2"), WS_CHILD|WS_VISIBLE | WS_POPUP,
    100, 100, 80, 25, hWnd, NULL, NULL,  NULL);

    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
    ShowWindow(hWnd1, SW_SHOW);
    UpdateWindow(hWnd1);
    ShowWindow(hWnd2, SW_SHOW);
    UpdateWindow(hWnd2);

    //wait for buttonpress
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    //return the buttonpress
    return (int) msg.wParam;
}



int main(void)
{

   //create window inside the buttonpress method
   int buttonpress = buildwindow();

   //check which button was pressed
   if(buttonpress = button1){
      //do something
   }
   elseif(buttonpress = button2){
      //do something else
   }
   //finish
   return(0);

}

【问题讨论】:

  • 那里有无数关于基本 WinAPI 编程的示例。买一本书(例如 Petzold)或做一些适当的研究。说真的,这个 API 已经存在了将近 30 年 - 它并不晦涩。
  • 如果这没有意义,那么您需要一本好的参考书。 Charles Petzold 的Programming Windows®, Fifth Edition 是Windows 编程的黄金标准。如果您赶时间,请查看Learn to Program for Windows in C++。在那之后事情就没有意义了,但它仍然比观看 YouTube 视频更好(如果你是,就停在那里;它没用,而且只是浪费时间)。
  • 很高兴知道,我确实有一个截止日期,我通常会寻找代码示例而不是尝试阅读书籍或文档,因为我发现这样我学得更快。我一直在看 youtube 视频,但你是对的,它们并不是很有用。我会看看那个 windows 链接
  • 好吧,从问题中的代码来看,您不奠定基础并尝试在没有必要知识的情况下编写程序的计划并不是很好。这段代码有很多问题。帮自己一个忙,阅读 Petzold 的书。这就是我们其他人学习 Win32 的方式。
  • 我知道有问题,我确实提到它是一个伪代码。很高兴知道 Petzold 的书,我会研究一下

标签: c++ windows winapi button createwindow


【解决方案1】:

在 WM_QUIT 消息到达之前,消息循环 (GetMessage) 不会结束。

需要为按钮点击事件实现回调函数。

我建议在这里阅读更多关于按钮消息的信息:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb775941(v=vs.85).aspx

【讨论】:

  • “鼠标点击事件的回调函数”的措辞有些误导​​。您真正需要的是按钮控件的父窗口的窗口过程,它可以处理适当的消息。这些消息通常不是按钮(或鼠标)单击事件,而是WM_COMMAND 消息。
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多