简单的c编程gui

San*_*osh 5 c user-interface textbox button win32gui

我用C语言开发了蒸汽表方程求解器......但是在黑屏控制台中输入值很无聊.

所以我非常想在C中创建简单的GUI.

我搜索了你好的世界代码,都很长.但这是我理解的唯一一个.

#include <windows.h>

int main()
{
MessageBoxA( NULL, "Hello World!", "Hello", MB_OK );
}
Run Code Online (Sandbox Code Playgroud)

通过使用GUI构建器C,我得到这个代码,现在我在想如何扫描从textBox1的1和TextBox值CommandButton1的点撃,并显示在TEXTBOX3输出

#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include "hello.auto.h"


HWND hwnd_Label1, hwnd_Label2, hwnd_TextBox1, hwnd_TextBox2, hwnd_CommandButton1,
hwnd_TextBox3;

HFONT MSSansSerif_8pt;



void CreateChildWindows(HWND hwndMainWindow, HINSTANCE hInstance)
{
InitCommonControls();

MSSansSerif_8pt = CreateFont(-11,0,0,0,FW_NORMAL,0,0,0,0,0,0,0,0,"MS Sans Serif");

hwnd_Label1 = CreateWindowEx(0, "Static", "Pressure",
    WS_CHILD | WS_VISIBLE,
    11, 55, 95, 38, hwndMainWindow,
    (HMENU)Label1, hInstance, NULL);

SetWindowFont(hwnd_Label1, MSSansSerif_8pt, TRUE);

hwnd_Label2 = CreateWindowEx(0, "Static", "Temperature",
    WS_CHILD | WS_VISIBLE,
    11, 110, 95, 38, hwndMainWindow,
    (HMENU)Label2, hInstance, NULL);

SetWindowFont(hwnd_Label2, MSSansSerif_8pt, TRUE);

hwnd_TextBox1 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit" , NULL,
    WS_CHILD | ES_WANTRETURN | WS_VISIBLE,
    187, 55, 83, 35, hwndMainWindow,
    (HMENU)TextBox1, hInstance, NULL);

SetWindowFont(hwnd_TextBox1, MSSansSerif_8pt, TRUE);

hwnd_TextBox2 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit" , NULL,
    WS_CHILD | ES_WANTRETURN | WS_VISIBLE,
    187, 99, 83, 35, hwndMainWindow,
    (HMENU)TextBox2, hInstance, NULL);

SetWindowFont(hwnd_TextBox2, MSSansSerif_8pt, TRUE);

hwnd_CommandButton1 = CreateWindowEx(0, "Button", "CommandButton1",
    WS_CHILD | BS_MULTILINE | BS_PUSHBUTTON | WS_VISIBLE,
    308, 77, 117, 52, hwndMainWindow,
    (HMENU)CommandButton1, hInstance, NULL);


SetWindowFont(hwnd_CommandButton1, MSSansSerif_8pt, TRUE);

hwnd_TextBox3 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit" , NULL,
    WS_CHILD | ES_WANTRETURN | WS_VISIBLE,
    66, 220, 385, 35, hwndMainWindow,
    (HMENU)TextBox3, hInstance, NULL);

SetWindowFont(hwnd_TextBox3, MSSansSerif_8pt, TRUE);

return;
}



HWND GetItem(int nIDDlgItem)
{
switch(nIDDlgItem)
{
    case -1:
        return GetParent(hwnd_Label1);
    case Label1:
        return hwnd_Label1;
    case Label2:
        return hwnd_Label2;
    case TextBox1:
        return hwnd_TextBox1;
    case TextBox2:
        return hwnd_TextBox2;
    case CommandButton1:
        return hwnd_CommandButton1;
    case TextBox3:
        return hwnd_TextBox3;
    default: return NULL;
}
}



void Form_Unload(HWND hMainWnd)
{
DeleteFont(MSSansSerif_8pt);
return;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了很多次,但都失败了.即使你们给我链接好的网站,我也会很高兴.

Cod*_*ray 7

你正在寻找一本关于使用C的Win32 API编程的好书.你很幸运,有一本很棒的书,几乎每个人都用来学习它.它是由Charles Petzold编写的,它被称为(恰如其分)编程Windows.你想要第5版,这是讨论Win32编程的最新版本.

如果您搜索"Win32编程",还可以在线获得各种教程.但是,其中一些包含一些错误和误解(如ANSI和Unicode字符串之间的差异),而好的则包含一些错误和不完整的错误.你不会学到从在线教程中编写一个非平凡程序所需要知道的一切,但你应该能够在屏幕上看到一些非常简单的东西.这个由Forger创建的是我多次见过的推荐.

被警告,虽然,写GUI代码(尤其是在如此低的水平),往往是很多更详细的比仅仅让文字在屏幕上的控制台程序.您最终将编写一堆代码,这些代码仅用于使GUI工作,并且与程序的逻辑无关.如果您首先学习C语言会更容易,最好通过简单的控制台类型的纯文本程序来完成.


至于你的具体问题,你在屏幕上,命名上创建三个TextBox控件hwnd_TextBoxX,这里X是1和3.正如你可能已经知道的数字,hwnd表示句柄窗口(WND) ,所以这些变量持有手柄到文本框窗口.

Win32 API提供了一个GetWindowText函数,您可以使用该函数从特定窗口中检索文本.您将句柄传递给所需的窗口(hWnd),指向字符缓冲区的指针以及指示缓冲区长度的整数值.C语言的丑陋本质已经出现了 - 您必须了解字符串在C中的工作方式才能正确调用函数.

一旦检索到其中一个文本框中显示的字符串,就可以使用类似的SetWindowText函数在另一个文本框窗口中显示它,该函数只接受窗口句柄(hWnd)和指向包含字符串的缓冲区的指针.

代码看起来像这样:

// Get the text displayed in textbox 1
TCHAR szBuffer[100];
GetWindowText(hwnd_TextBox1, szBuffer, 100);

// Display that text in textbox 3
SetWindowText(hwnd_TextBox3, szBuffer);
Run Code Online (Sandbox Code Playgroud)

要通过单击按钮来执行此操作,您需要了解Win32等效的"事件"窗口消息.子窗口,如按钮控件,当发生可能有趣的事情时(例如用户点击它们),将通知消息发送到其父窗口(即对话框).

特别是,按钮控件通过消息向其父节点发送BN_CLICKED通知.通过在主窗口的窗口procedure()方法中处理消息,您可以检查参数是否与按钮控件的窗口句柄()匹配,以及是否与通知代码匹配.WM_COMMANDWM_COMMANDWndProclParamhWndHIWORD(wParam)BN_CLICKED

你肯定需要一本好的书,其中包含该书的逐步示例代码.在Stack Overflow答案中彻底解释有点太难了.