C语言结构体和结构体数组的使用;
/* C结构体和结构体数组示例,by bobo */
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
struct stu{
char *name;
int age;
float score;
}estus[] = {
{"敏敏",20,97.99},
{"芷若",20,98.99},
{"晓芙",27,96.98}
};
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("struct Demo") ;
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 = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName,TEXT ("C结构体和结构体数组示例"),
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;
int i;
char buffer[65];
char dstr[20];
struct stu stu1;
switch (message)
{
case WM_CREATE:
return 0 ;
case WM_LBUTTONDOWN:
hdc = GetDC(hwnd);
stu1.name="小昭";
stu1.age=18;
stu1.score=99.99;
sprintf(dstr,"%.2lf",stu1.score);//将stu1.score保留2位小数赋值给dstr
wsprintf(buffer, "姓名:%s,年龄:%d,成绩:%s", stu1.name,stu1.age,dstr);
TextOut(hdc, 300, 20, buffer, 35);
for(i=0;i<3;i++)
{
sprintf(dstr,"%.2lf",estus[i].score);
wsprintf(buffer, "姓名:%s,年龄:%d,成绩:%s", estus[i].name,estus[i].age,dstr);
TextOut(hdc, 300, 45+25*i, buffer, 35);
}
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
由于Windows API的wsprintf函数在格式化时不支持浮点类型,先用sprintf把浮点转为字符串;