/*对于大多数人而言 没人能记住Windows程序创建的每一个步骤 但我们主要了解Windows窗口程序的基本框架 复制修改部分代码 实现我们自己的需求
以下代码命名规范 相当于注释
在选择编译器是注意一些问题
如果使用dev c++中 选择工具-编译选项-编译时加入一下命令
-mwindows -lwinmm
否则编译时出现以下错误提示
C:\Users\ADMINI~1\AppData\Local\Temp\ccJ022xC.o xxx.cpp:(.text+0x79): undefined reference to `__imp_GetStockObject'
C:\Users\ADMINI~1\AppData\Local\Temp\ccJ022xC.o xxx.cpp:(.text+0x20b): undefined reference to `__imp_PlaySoundA'
F:\C++例子\collect2.exe [Error] ld returned 1 exit status
2、如果使用microsoft visual studio中 选择项目名称 或者解决方案名称-右键 选择属性-链接器-系统-子系统-:窗口(/System:windows)
程序大致思路
1、引文必要的头文件
2、声明窗口过程
3、定义主函数
*/
/*------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
(c) Charles Petzold, 1998
------------------------------------------------------------*/
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
//HINSTANCE 是Windows里的一中数据类型,其实就是一个无符号的长整形,是32位的
//WINAPI是一种调用约定 __stdcall 这些格式基本都是固定的,这些大写的标识符都是
//CALLBACK实际也是调用约定 __stdcall ,用不同的标识符主要说明其大致作用,都是
//在Windows头文件中定义的
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
//定义窗口类 TCHAR在使用ascii编码是调用ascii版本函数 使用Unicode版本时自动调用
//Unicode版本函数
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ; //
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 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 ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
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_CREATE:
PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, TEXT ("Hello, Windows 2023!"), -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) ;
}
/*我的dev
c++编译效果
visual stdio编译效果