C语言结构体和结构体数组示例 - Win32窗口程序演示

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把浮点转为字符串;

发布了434 篇原创文章 · 获赞 512 · 访问量 294万+

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/104066871