使用Windows API在C中编程:如何绘制命令按钮

Ish*_*rma 3 c windows winapi

好吧,我正在用C语言建立一个大学项目.GUI还没有被教过,但我希望我的程序更好,所以我正在学习Windows API.

我在这里遵循这个教程:http://www.winprog.org/tutorial/start.html,它非常好.它解释了很多东西,但我找不到一件事(甚至搜索谷歌,但一切都是针对C++或C#):

如何在绘制的窗口(我学到的)中绘制一个命令按钮以及如何接受它的事件?

您能否回答或指向一个很好的页面,解释如何使用ONLY Windows API和C来创建命令按钮.请不要使用C++.

谢谢你的时间!:)

小智 5

是我强烈推荐的关于Win32 API用户界面功能的教程.这很棒.粗略地说,在你的回调函数中(LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )你可以捕获几个选项:

switch(msg)  
{
    case WM_CREATE:
        break;

    case WM_COMMAND:
        break;
    /* .. */
}
Run Code Online (Sandbox Code Playgroud)

你需要做的WM_CREATE是这样的事情:

HWND hWnd_button = CreateWindow(TEXT("button"), TEXT("Quit"),    
                 WS_VISIBLE | WS_CHILD ,
                 20, 50, 80, 25,        
                 hwnd, (HMENU) 1, NULL, NULL);  
Run Code Online (Sandbox Code Playgroud)

我存储该HWND按钮的原因是,如果你想在以后更改按钮,你需要将Handle作为参数SendMessage().现在,接下来,点击一下.单击该按钮时,它将WM_COMMAND使用HMENU铸造参数(在本例中为1)发送到父窗口wParam.这适用于您创建的每个控件(菜单,复选框等 - 如果它们发布可能存在的更复杂的选项lParam).所以:

case WM_COMMAND:
    if (LOWORD(wParam) == 1) {
        DestroyWindow();
        /* or SendMessage(hwnd, WM_CLOSE,0,0); see commments */
    }
    break;
Run Code Online (Sandbox Code Playgroud)

抓住那个特别的选择.在if按钮事件的句柄内.