好吧,我正在用C语言建立一个大学项目.GUI还没有被教过,但我希望我的程序更好,所以我正在学习Windows API。
我在这里遵循这个教程:http://www.winprog.org/tutorial/start.html并且非常好。 它解释了很多东西,但我找不到一件事(甚至搜索谷歌,但一切都是针对C ++或C#):
如何在绘制的窗口中绘制一个命令按钮(我已经学习过)以及如何接受它的事件?
您能否回答或指向一个很好的页面,该页面解释了如何使用Windows API和C来创建命令按钮。请不要使用C ++。
感谢您的时间! :)
答案 0 :(得分:5)
This是我在Win32 API用户界面函数上强烈推荐的教程。这很棒。粗略地说,在你的回调函数(LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
中,你可以捕获几个选项:
switch(msg)
{
case WM_CREATE:
break;
case WM_COMMAND:
break;
/* .. */
}
WM_CREATE
需要做的是:
HWND hWnd_button = CreateWindow(TEXT("button"), TEXT("Quit"),
WS_VISIBLE | WS_CHILD ,
20, 50, 80, 25,
hwnd, (HMENU) 1, NULL, NULL);
我存储该按钮的HWND
的原因是,如果您想在以后更改按钮,则需要将Handle作为SendMessage()
的参数。现在,接下来,点击一下。单击该按钮时,它会在WM_COMMAND
中将HMENU
发送到父窗口,其中wParam
已转换参数(在本例中为1)。这适用于您创建的每个控件(菜单,复选框等 - 如果它们发布了lParam
中可能存在的更复杂的选项)。所以:
case WM_COMMAND:
if (LOWORD(wParam) == 1) {
DestroyWindow();
/* or SendMessage(hwnd, WM_CLOSE,0,0); see commments */
}
break;
抓住那个特定的选择。在if
处理该按钮事件。
答案 1 :(得分:1)
只需将CreateWindow
与类名"BUTTON"
,样式BS_PUSHBUTTON
和父窗口一起用作现有的绘制窗口即可。 x和y坐标选择窗口中的左上角按钮位置。窗口名称是按钮上的文本。另外,请记得在返回的句柄上调用ShowWindow
。
编辑:要接受它的事件,首先要定义一个ID值,如:
#define ID_MYBUTTON 1
然后将其传递给CreateWindow调用的menu-parameter。在主窗口消息proc中,您现在可以通过测试来找到消息:
if(message == WM_COMMAND && HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == ID_MYBUTTON) { /* button was clicked */ }