C语言问题:刚学C没多久,发现写出来的C程序打开都是黑色的控制台,和其他的软件看起来根本不一样

2024-10-31 13:31:32
推荐回答(2个)
回答1:

要想写出有界面的Windows程序,需要用到Win API实现(望采纳!)

如下代码就是创建一个最基本的窗口:

//调用api函数创建窗口

//示例:

#include 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程函数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("MyWindows");//定义窗口类名
HWND hwnd;//窗口句柄
MSG msg; //
WNDCLASS wndclass;  //窗口类

wndclass.style = CS_HREDRAW | CS_VREDRAW;//指定窗口类型,各种“类风格”(详见下方↓)可以使用按位或操作符组合起来
wndclass.lpfnWndProc = WndProc;//指定窗口过程(必须是回调函数)
wndclass.cbClsExtra = 0;//预留的额外空间,一般为 0
wndclass.cbWndExtra = 0;//预留的额外空间,一般为 0
wndclass.hInstance = hInstance;//应用程序的实例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//为所有基于该窗口类的窗口设定一个图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//为所有基于该窗口类的窗口设定一个鼠标指针
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//指定窗口背景色
wndclass.lpszMenuName = NULL;//指定窗口菜单
wndclass.lpszClassName = szAppName;//指定窗口类名

if (!RegisterClass(&wndclass))//注册窗口
{
MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
return 0;
}

hwnd = CreateWindow(szAppName,      //创建窗口
TEXT("windows"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hwnd, iCmdShow);  //显示窗口
UpdateWindow(hwnd);      //更新窗口,重绘

while (GetMessage(&msg, NULL, 0, 0)) //获得消息
{
TranslateMessage(&msg);//解释消息
DispatchMessage(&msg);//分配消息
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//回调函数
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);//获取设备环境句柄
GetClientRect(hwnd, &rect);//获取客户区矩形
DrawText(hdc, TEXT("第一个C语言窗口程序!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);//在客户区中心绘制文本
EndPaint(hwnd, &ps);//结束绘制
return 0;

case WM_DESTROY://得到结束程序消息
PostQuitMessage(0);//结束程序
return 0;
}

return DefWindowProc(hwnd, message, wParam, lParam);
}

回答2:

这学程序,入门是语法算法,,,,,C写界面是属于高级开发,得懂语法算法 后,再通过学习操作系统的API,或引用第3方的界面库去开发界面

~~~~