#include <windows.h>
// 窗口回调函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
int main() {
// 注册窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0, // 扩展窗口样式
wc.lpszClassName, // 窗口类名
"My Window", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置
800, 600, // 窗口大小
NULL, // 父窗口
NULL, // 菜单
wc.hInstance, // 实例句柄
NULL // 附加应用程序数据
// 显示窗口
ShowWindow(hwnd, SW_SHOW);
// 运行消息循环
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
return 0;
这个例子展示了如何使用WinAPI创建一个简单的窗口,并设置其初始大小和位置。
2、SDL
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体库,用于直接访问音频、键盘、鼠标、显示器等硬件。使用SDL可以方便地创建和管理窗口。
#include <SDL2/SDL.h>
int main() {
// 初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
return -1;
// 创建窗口
SDL_Window *window = SDL_CreateWindow(
"My SDL Window", // 窗口标题
SDL_WINDOWPOS_CENTERED, // 窗口位置X
SDL_WINDOWPOS_CENTERED, // 窗口位置Y
800, 600, // 窗口大小
SDL_WINDOW_SHOWN // 窗口标志
// 检查窗口是否创建成功
if (!window) {
SDL_Quit();
return -1;
// 等待2秒
SDL_Delay(2000);
// 销毁窗口并退出
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
这个例子展示了如何使用SDL创建一个窗口,并设置其初始位置和大小。
二、修改窗口属性
1、窗口样式
窗口样式决定了窗口的外观和行为。例如,可以设置窗口是否有边框、是否可以调整大小、是否有标题栏等。WinAPI提供了多种窗口样式,如WS_OVERLAPPEDWINDOW
、WS_POPUP
、WS_BORDER
等。
HWND hwnd = CreateWindowEx(
0, // 扩展窗口样式
wc.lpszClassName, // 窗口类名
"My Window", // 窗口标题
WS_OVERLAPPEDWINDOW | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置
800, 600, // 窗口大小
NULL, // 父窗口
NULL, // 菜单
wc.hInstance, // 实例句柄
NULL // 附加应用程序数据
通过组合不同的窗口样式,可以灵活地定制窗口的外观和行为。
2、窗口属性
窗口属性包括窗口的背景颜色、图标、光标等。可以通过WinAPI的SetClassLong
和SetWindowLong
函数来设置这些属性。
// 设置窗口背景颜色
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
// 设置窗口图标
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
// 设置窗口光标
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
三、调整窗口大小和位置
1、调整窗口大小
可以使用WinAPI的MoveWindow
或SetWindowPos
函数来调整窗口的大小。
// 调整窗口大小
MoveWindow(hwnd, x, y, width, height, TRUE);
// 或者使用SetWindowPos
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
2、调整窗口位置
同样,可以使用MoveWindow
或SetWindowPos
函数来调整窗口的位置。
// 调整窗口位置
MoveWindow(hwnd, x, y, width, height, TRUE);
// 或者使用SetWindowPos
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
四、跨平台图形库
除了WinAPI和SDL,还有一些跨平台的图形库可以用于创建和管理窗口,如GLFW和Qt。
1、GLFW
GLFW是一个用于OpenGL的跨平台库,主要用于创建窗口、上下文和处理输入。
#include <GLFW/glfw3.h>
int main() {
// 初始化GLFW
if (!glfwInit()) {
return -1;
// 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "My GLFW Window", NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
// 设置窗口位置
glfwSetWindowPos(window, 100, 100);
// 循环,直到用户关闭窗口
while (!glfwWindowShouldClose(window)) {
// 渲染代码
glClear(GL_COLOR_BUFFER_BIT);
// 交换前后缓冲
glfwSwapBuffers(window);
// 处理事件
glfwPollEvents();
// 销毁窗口并退出
glfwDestroyWindow(window);
glfwTerminate();
return 0;
Qt是一个跨平台的C++图形用户界面库,可以用于创建复杂的图形界面。
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建窗口
QWidget window;
window.resize(800, 600);
window.setWindowTitle("My Qt Window");
window.show();
return app.exec();
通过以上方法,可以在C语言中灵活地设置初始窗口。使用图形库是最常用的方法,通过修改窗口属性和调整窗口大小和位置可以进一步定制窗口的外观和行为。跨平台图形库如SDL和GLFW提供了便捷的方式来创建和管理窗口,而Qt则适用于创建复杂的图形界面。在实际项目中,选择合适的工具和方法可以有效提高开发效率和用户体验。
在项目管理中,合适的工具能够显著提高开发效率。如果你在进行研发项目管理,可以考虑使用PingCode,而如果你需要一个通用的项目管理软件,Worktile是一个不错的选择。这些工具能够帮助你更好地组织和管理项目,确保项目按时按质完成。