1 引言
1.1 编写目的:
为了对院级活动《最强大脑》提供软件支持,同时为了练习使用windows API。
1.2 项目背景:
来自计算机学院学生会信息部指派的任务,规定时间完成软件的编写。
1.3 参考资料:
● 《windows程序设计》、网络资料
● 文档格式来自 由详细设计说明书改编2 总体设计
2.1 需求概述
《随机出题软件》:分程序和题库,题库为3、5、7分题库。程序界面需提供这三种题的按钮,需要具有从题库中随机抽取题目、显示题目、显示答案以及倒计时功能。
《随机分队软件》:随机分好队伍。分别实现30人选5人,10人选5人。选出来的是编号。
3 程序描述
《随机出题软件》:
题库文件“1.txt、2.txt、3.txt”,答案文件分别对应“a1.txt、a2.txt、a3.txt”,放在程序根目录下。
题库中存题目的格式应该是"#12 李白字什么?",其中题号和题目描述不能连在一起。
题目描述中不能出现‘#’字符,否则误认为后面是题号。
3.1 逐个模块给出以下说明:
● 功能
《随机出题软件》:
随机抽取题库中题目、显示题目、显示答案、倒计时、声效提示、自动更新题库大小。
《随机分队软件》:
30选5、10选5、显示分队结果。
● 性能
《随机出题软件》:
题库如果过大,软件会卡死,显示的题目不能太长,所以要规范好题库文件。
3.2 算法:
《随机出题软件》:
核心算法为调用rand()及srand()实现随机出题功能,另无高深算法。
● 存储分配
利用txt文件存储,而没使用数据库,存储以及管理数据较为麻烦。
4 程序展示
《随机出题软件》:
文件结构:
使用演示:
《随机分队软件》:
文件结构:
使用演示:
5 源代码
目录:
源代码下载地址(包含题库):
部分代码展示:
《随机出题软件》:
- 主要的cpp文件
myRandom.cpp
1 #include "myRandom.h" 2 #include3 #include 4 #include 5 6 extern int QT_1,QT_2,QT_3; 7 8 int random(int qt) //传入题库号和该题库使用记录,然后随机输出该题库中的一个题的题号 9 { 10 int num; 11 switch(qt){ 12 case 1:num = rand() % QT_1 + 1;break; //产生指定题库的随机题号 13 case 2:num = rand() % QT_2 + 1;break; 14 case 3:num = rand() % QT_3 + 1;break; 15 default:num=0; 16 } 17 return num; 18 } 19 20 21 int print_qt(int qt,int num,char question[]) //将指定题库(qt)中指定题号(num)的题的内容输出出来 22 { 23 int len = 0; 24 //将“qt.txt”放到字符数组filename中,根据qt的不同可改变 25 char filename[20]; 26 int t=qt,i=0; 27 while(t/10){ //将题库号qt输入进filename中 28 filename[i++]=t/10+'0'; 29 t/=10; 30 } 31 filename[i++]=t+'0'; 32 char* p = filename; 33 strcpy(p+i,".txt"); //将.txt补上 34 //cout< <
win1.cpp
1 // win1.cpp : Defines the entry point for the application. 2 // 3 #include4 #include 5 #include 6 #include "resource.h" 7 #include "myRandom.h" 8 #include "varset.h" //各类相关变量设置 9 #include "stdafx.h" 10 #define LASTTIME 30 11 #pragma comment(lib, "WINMM.LIB") 12 13 extern int QT_1 = 0,QT_2 = 0,QT_3 = 0; //每个题库中题目,初始化为0 14 15 bool isuse1[1001] = { 0}; //题目使用记录 //抽到的题赋true,初始化为false 16 bool isuse2[1001] = { 0}; //题目使用记录 17 bool isuse3[1001] = { 0}; //题目使用记录 18 19 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 20 BOOL CALLBACK AboutProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam); 21 BOOL CALLBACK AboutProc4(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam); 22 23 int APIENTRY WinMain(HINSTANCE hInstance, 24 HINSTANCE hPrevInstance, 25 LPSTR lpCmdLine, 26 int nCmdShow) 27 { 28 // TODO: Place code here. 29 static TCHAR szmywndName[] = TEXT("Win1"); 30 HWND hwnd; 31 MSG msg; 32 33 //给全局变量赋值 34 hInst = hInstance; 35 //设置父窗口位置和尺寸 36 int width = GetSystemMetrics ( SM_CXSCREEN ); 37 int height= GetSystemMetrics ( SM_CYSCREEN ); 38 CCW_X = width / 10 * 3; 39 CCW_Y = height / 3; 40 CCW_WIDTH = width / 10 * 4; 41 CCW_HEIGHT = height / 10 * 4; 42 //设置按钮尺寸 43 CBN_WIDTH = int(CCW_WIDTH / 10.0 * 2); 44 CBN_HEIGHT = int(CCW_HEIGHT / 6.0); 45 //设置静态文本框尺寸 46 CSTA_WIDTH = int(CCW_WIDTH /10.0 * 8); 47 CSTA_HEIGHT = int(CCW_HEIGHT /100.0 * 60); 48 49 WNDCLASS mywnd; 50 mywnd.cbClsExtra = 0; 51 mywnd.cbWndExtra = 0; 52 mywnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景 53 mywnd.hCursor = LoadCursor(NULL,IDC_ARROW); //光标 54 //mywnd.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON1)); //图标 55 mywnd.hIcon = (HICON)LoadImage(NULL,"icon2.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE); 56 mywnd.hInstance = hInstance; //设置句柄 57 mywnd.lpfnWndProc = WndProc; //设置窗口过程 58 mywnd.lpszClassName = szmywndName; //设置窗口类名字 59 mywnd.lpszMenuName = NULL; //设置菜单名字 60 mywnd.style = CS_HREDRAW | CS_VREDRAW; //设置窗口风格 61 //LoadImage(NULL,"D:\\win1\\icon.png",IMAGE_ICON,0,0,LR_LOADFROMFILE); 62 63 if(!RegisterClass(&mywnd)){ //注册窗口类 64 MessageBox(NULL,TEXT("This program requires Windows NT!"),szmywndName,MB_ICONERROR); 65 return 0; 66 } 67 68 //创建窗口 69 hwnd = CreateWindow(szmywndName, 70 TEXT("自动抽题程序 --- freecode"), 71 WS_OVERLAPPEDWINDOW^WS_THICKFRAME ^ WS_MAXIMIZEBOX , 72 CCW_X, 73 CCW_Y, 74 CCW_WIDTH, 75 CCW_HEIGHT, 76 NULL, 77 NULL, 78 hInstance, 79 NULL); 80 mainhwnd = hwnd; //给全局变量赋值 81 82 ShowWindow(hwnd,nCmdShow); //显示窗口 83 UpdateWindow(hwnd); //升级窗口 84 85 while(GetMessage(&msg,NULL,0,0)){ //消息循环 86 TranslateMessage(&msg); 87 DispatchMessage(&msg); 88 } 89 90 return msg.wParam; 91 } 92 93 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 94 { 95 HWND hwndButton1,hwndButton2,hwndButton3; 96 HDC hdc; 97 PAINTSTRUCT ps; 98 RECT rect; 99 int wmId,wmEvent;100 HFONT hFont;101 102 switch(message){103 case WM_CREATE:104 //hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;105 106 srand((unsigned)time(0)); //设置产生随机数的种子107 //memset(isuse1,0,sizeof(isuse1)); //不知道为什么不能使用108 //memset(isuse2,0,sizeof(isuse2));109 //memset(isuse3,0,sizeof(isuse3));110 111 //查找每个题库中题目数量112 QT_1 = FindQtNum(1);113 QT_2 = FindQtNum(2);114 QT_3 = FindQtNum(3);115 116 //创建 按钮(3分题)117 hwndButton1 = CreateWindow(TEXT("button"),118 TEXT("3分题"),119 WS_TABSTOP | WS_CHILD | WS_VISIBLE ,120 int(CCW_WIDTH / 10.0 * 1),int(CCW_HEIGHT / 6.0 * 3),CBN_WIDTH,CBN_HEIGHT,121 hwnd,122 (HMENU)1,123 hInst,124 NULL);125 //设置字体126 LOGFONT LogFont;127 ::memset(&LogFont, 0, sizeof(LOGFONT));128 lstrcpy(LogFont.lfFaceName, "隶书");129 LogFont.lfWeight = 100;130 LogFont.lfHeight = 30;//-44; // 字体大小131 LogFont.lfCharSet = 134;132 LogFont.lfOutPrecision = 3;133 LogFont.lfClipPrecision = 2;134 LogFont.lfOrientation = 45;135 LogFont.lfQuality = 1;136 LogFont.lfPitchAndFamily = 2;137 138 // 创建字体139 hFont = CreateFontIndirect(&LogFont);140 // 设置控件字体141 SendMessage(hwndButton1, WM_SETFONT, (WPARAM)hFont, 0); 142 143 //创建 按钮(5分题)144 hwndButton2 = CreateWindow(TEXT("button"),145 TEXT("5分题"),146 WS_TABSTOP | WS_CHILD | WS_VISIBLE ,147 int(CCW_WIDTH / 10.0 * 3.8),int(CCW_HEIGHT / 6.0 * 3),CBN_WIDTH,CBN_HEIGHT,148 hwnd,149 (HMENU)2,150 hInst,151 NULL);152 // 设置控件字体153 SendMessage(hwndButton2, WM_SETFONT, (WPARAM)hFont, 0); 154 155 156 //创建 按钮(7分题)157 hwndButton3 = CreateWindow(TEXT("button"),158 TEXT("7分题"),159 WS_TABSTOP | WS_CHILD | WS_VISIBLE ,160 int(CCW_WIDTH / 10.0 * 6.6),int(CCW_HEIGHT / 6.0 * 3),CBN_WIDTH,CBN_HEIGHT,161 hwnd,162 (HMENU)3,163 hInst,164 NULL);165 // 设置控件字体166 SendMessage(hwndButton3, WM_SETFONT, (WPARAM)hFont, 0); 167 168 169 return 0;170 case WM_COMMAND:171 wmId = LOWORD(wParam); 172 wmEvent = HIWORD(wParam);173 switch(wmId){174 case 1: //单击3分题按钮,开始在3分题库里,抽题175 /* 非模态176 hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,AboutProc);177 if(hdlg) 178 { 179 //显示对话框 180 ShowWindow(hdlg, SW_NORMAL); 181 } 182 */183 184 TK = 1;185 DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd,AboutProc);186 187 //hdlg = FindWindow(MAKEINTRESOURCE(IDD_DIALOG1),NULL); //获得对话框句柄188 break;189 190 191 case 2: //单击5分题按钮,开始在3分题库里,抽题192 TK = 2;193 DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd,AboutProc); 194 break;195 196 197 case 3: //单击7分题按钮,开始在3分题库里,抽题198 TK = 3;199 DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd,AboutProc); 200 break;201 default:202 break;203 }204 return 0;205 case WM_PAINT:206 hdc = BeginPaint(hwnd,&ps); //获得句柄207 208 GetClientRect(hwnd,&rect); //获得客户区尺寸209 rect.bottom -= CBN_HEIGHT * 2;210 //显示文字211 hFont = CreateFont(212 70,0, //高度20, 宽取0表示由系统选择最佳值213 0, 0, //文本倾斜,与字体倾斜都为0214 FW_HEAVY, //粗体215 0,0,0, //非斜体,无下划线,无中划线216 GB2312_CHARSET, //字符集217 OUT_DEFAULT_PRECIS, 218 CLIP_DEFAULT_PRECIS, 219 DEFAULT_QUALITY, //一系列的默认值220 DEFAULT_PITCH | FF_DONTCARE, 221 "楷体" //字体名称222 );223 SetTextColor(hdc, RGB(0, 255, 0)); //设置文本为绿色224 SelectObject(hdc, hFont);225 226 DrawText(hdc,TEXT("抽 题 环 节"),-1,&rect,227 DT_SINGLELINE | DT_CENTER | DT_VCENTER);228 229 EndPaint(hwnd,&ps);230 ReleaseDC(hwnd,hdc);231 return 0;232 case WM_DESTROY:233 PostQuitMessage(0);234 return 0;235 }236 return DefWindowProc(hwnd,message,wParam,lParam);237 }238 BOOL CALLBACK AboutProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) //题目显示窗口239 {240 int t;241 int qtsum; //题目总数242 bool* isu; //存储访问数组243 char question[1010]; //题目描述244 int qtnum; //随机产生的题号245 HWND hwndStatic,hwndStatic3; //存储静态文本框句柄246 HFONT hFont;247 248 switch (message){249 case WM_INITDIALOG :250 //PlaySound("d:\\win1\\last2.wav", NULL, SND_FILENAME | SND_ASYNC);251 PlaySound(".\\素材\\last2.wav", NULL, SND_FILENAME | SND_ASYNC);252 SetTimer(hDlg, 1, 1000, NULL); //设置一个1s定时器253 num = LASTTIME;254 SetDlgItemInt(hDlg, IDC_STATIC3, num--, FALSE);255 256 //设置 IDC_STATIC3 倒计时字体257 LOGFONT LogFont;258 ::memset(&LogFont, 0, sizeof(LOGFONT));259 lstrcpy(LogFont.lfFaceName, "华文新魏");260 LogFont.lfWeight = 600;261 LogFont.lfHeight = 80;//-44; // 字体大小262 LogFont.lfCharSet = 134;263 LogFont.lfOutPrecision = 3;264 LogFont.lfClipPrecision = 2;265 LogFont.lfOrientation = 45;266 LogFont.lfQuality = 1;267 LogFont.lfPitchAndFamily = 2;268 269 // 创建字体270 hFont = CreateFontIndirect(&LogFont);271 272 // 取得控件句柄273 hwndStatic3 = GetDlgItem(hDlg, IDC_STATIC3);274 // 设置控件字体275 SendMessage(hwndStatic3, WM_SETFONT, (WPARAM)hFont, 0); 276 /* 不知道为什么不能用277 hdc3 = GetDC(hwndStatic3);278 SetTextColor(hdc3,RGB(0,128,128));//设置字体颜色279 */280 281 //选择题库282 switch(TK){283 case 1:284 qtsum = QT_1;285 isu = isuse1;286 break;287 case 2:288 qtsum = QT_2;289 isu = isuse2;290 break;291 case 3:292 qtsum = QT_3;293 isu = isuse3;294 break;295 default:296 break;297 }298 for(t=1;t<=qtsum;t++) //检测题目中有没有没使用过的题299 if(!isu[t])300 break;301 if(t>qtsum){302 EndDialog (hDlg, 0) ;303 MessageBox(NULL,TEXT("该题库中的题已全部抽完!"),TEXT("ERROR"),MB_ICONERROR);304 break;305 }306 while(1){307 qtnum = random(TK); //在TK题库里抽题。308 if(!isu[qtnum]){ //出到没被使用过的题309 isu[qtnum] = true;310 break;311 }312 }313 314 QUESTION = qtnum;315 316 hwndStatic = GetDlgItem(hDlg,IDC_STATIC1);317 318 if(print_qt(TK,qtnum,question)){ //抽题成功,题目放在question字符数组里(抽题失败的话函数中有警示代码,并返回0,无需理会)319 SetWindowText(hwndStatic, question);320 }321 else return false;322 323 return TRUE ;324 case WM_COMMAND :325 switch (LOWORD (wParam)){326 case IDOK : //答案327 EndDialog (hDlg, 0) ;328 PlaySound(NULL, NULL, SND_FILENAME | SND_ASYNC);329 DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), mainhwnd,AboutProc4);330 break;331 case IDCANCEL :332 PlaySound(NULL, NULL, SND_FILENAME | SND_ASYNC);333 EndDialog (hDlg, 0) ;334 return TRUE ;335 }336 break;337 case WM_TIMER:338 if(num>5){339 SetDlgItemInt(hDlg, IDC_STATIC3, num--, FALSE);340 }341 else if(num==5){342 PlaySound(".\\素材\\last1.wav", NULL, SND_FILENAME | SND_ASYNC);343 SetDlgItemInt(hDlg, IDC_STATIC3, num--, FALSE);344 }345 else if(0<=num && num<5){346 PlaySound(".\\素材\\last1.wav", NULL, SND_FILENAME | SND_ASYNC);347 SetDlgItemInt(hDlg, IDC_STATIC3, num--, FALSE);348 }349 else{350 PlaySound(".\\素材\\ao.wav", NULL, SND_FILENAME | SND_ASYNC);351 hwndStatic3 = GetDlgItem(hDlg, IDC_STATIC3);352 SetWindowText(hwndStatic3, "囧");353 KillTimer(hDlg, 1);354 MessageBox(hDlg,TEXT(" 对不起,您没有时间了!^_^"),TEXT(" 囧 "),MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL);355 }356 default:break;357 }358 return FALSE ;359 }360 361 BOOL CALLBACK AboutProc4(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) //答案显示窗口362 {363 HWND hwndStatic; //存储静态文本框句柄364 char answer[1000]; //存储答案365 366 switch (message){367 case WM_INITDIALOG :368 hwndStatic = GetDlgItem(hDlg,IDC_STATIC2);369 //根据题库和题号获取答案370 if(getAnswer(TK,QUESTION,answer)){ //获取答案成功,答案放在answer字符数组里(抽题失败的话函数中有警示代码,并返回0,无需理会)371 SetWindowText(hwndStatic, answer);372 }373 return TRUE ;374 case WM_COMMAND :375 switch (LOWORD (wParam)){376 case IDOK : 377 break;378 case IDCANCEL :379 EndDialog (hDlg, 0) ;380 return TRUE ;381 }382 break;383 default:break;384 }385 return FALSE ;386 }
- 主要的header头文件
myRandom.h
1 #include2 #include 3 #include 4 #include 5 6 //#define QT_1 275 //题库1的大小(题数) 7 //#define QT_2 170 //题库2的大小 8 //#define QT_3 190 //题库3的大小 9 10 int random(int qt); //传入题库号,然后随机输出该题库中的一个题的题号11 int print_qt(int qt,int num,char question[]); //将指定题库(qt)中指定题号(num)的题的内容输出出来。12 int getAnswer(int TK,int QUESTION,char answer[1000]); //在制定答案库中获取答案13 int FindQtNum(int qt); //获得指定题库的题目数目
varset.h
1 #ifndef __MYHEADER__ 2 #define __MYHEADER__ 3 4 //存储窗口句柄的全局变量 5 HINSTANCE hInst; 6 HWND mainhwnd; 7 //设置父窗口位置和尺寸 8 int CCW_X; 9 int CCW_Y;10 int CCW_WIDTH;11 int CCW_HEIGHT;12 //设置按钮尺寸13 int CBN_WIDTH;14 int CBN_HEIGHT;15 //设置静态文本框尺寸16 int CSTA_WIDTH;17 int CSTA_HEIGHT;18 //题目19 int TK; //题库20 int QUESTION; //随机产生的题号21 //倒计时22 int num;23 24 #endif __MYHEADER__
《随机分队软件》:
- 主要的cpp文件
win2.cpp
1 // win1.cpp : Defines the entry point for the application. 2 // 3 #include "stdafx.h" 4 #include5 #include 6 #include 7 #include 8 #include "resource.h" 9 10 #define SUM 30 //全部的人数 必须 SUM%TEAMNUM==0 11 #define TEAMNUM 5 //每队人数 12 #define CCW_X 600 13 #define CCW_Y 300 14 #define CCW_WIDTH 260 15 #define CCW_HEIGHT 120 16 #define CBN_WIDTH 260 17 #define CBN_HEIGHT 92 18 19 HINSTANCE hInst; 20 bool allnum[SUM+1] = { 0}; //全部编号 21 char team[1000]; //抽中的编号 22 int teamnum; 23 24 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 25 BOOL CALLBACK AboutProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam); 26 27 int APIENTRY WinMain(HINSTANCE hInstance, 28 HINSTANCE hPrevInstance, 29 LPSTR lpCmdLine, 30 int nCmdShow) 31 { 32 // TODO: Place code here. 33 static TCHAR szmywndName[] = TEXT("Win2"); 34 HWND hwnd; 35 MSG msg; 36 37 hInst = hInstance; //全局变量赋值 38 39 WNDCLASS mywnd; 40 mywnd.cbClsExtra = 0; 41 mywnd.cbWndExtra = 0; 42 mywnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景 43 mywnd.hCursor = LoadCursor(NULL,IDC_ARROW); //光标 44 //mywnd.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON1)); //图标 45 mywnd.hIcon = (HICON)LoadImage(NULL,"icon2.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE); 46 mywnd.hInstance = hInstance; //设置句柄 47 mywnd.lpfnWndProc = WndProc; //设置窗口过程 48 mywnd.lpszClassName = szmywndName; //设置窗口类名字 49 mywnd.lpszMenuName = NULL; //设置菜单名字 50 mywnd.style = CS_HREDRAW | CS_VREDRAW; //设置窗口风格 51 52 if(!RegisterClass(&mywnd)){ //注册窗口类 53 MessageBox(NULL,TEXT("This program requires Windows NT!"),szmywndName,MB_ICONERROR); 54 return 0; 55 } 56 57 //创建窗口 58 hwnd = CreateWindow(szmywndName, 59 TEXT("自动分队程序"), 60 //WS_OVERLAPPEDWINDOW , 61 WS_OVERLAPPEDWINDOW^WS_CAPTION^WS_THICKFRAME^WS_MAXIMIZEBOX, 62 CCW_X, 63 CCW_Y, 64 CCW_WIDTH, 65 CCW_HEIGHT, 66 NULL, 67 NULL, 68 hInstance, 69 NULL); 70 71 ShowWindow(hwnd,nCmdShow); //显示窗口 72 UpdateWindow(hwnd); //升级窗口 73 74 while(GetMessage(&msg,NULL,0,0)){ //消息循环 75 TranslateMessage(&msg); 76 DispatchMessage(&msg); 77 } 78 79 return msg.wParam; 80 } 81 82 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 83 { 84 HWND hwndButton1; 85 HDC hdc; 86 PAINTSTRUCT ps; 87 int wmId,wmEvent; 88 int num; 89 int sel[TEAMNUM+1] = { 0}; 90 int i,j,t,p,length; 91 char* str; 92 HFONT hFont; 93 94 switch(message){ 95 case WM_CREATE: 96 //创建按钮 97 teamnum=0; 98 srand((unsigned)time(0)); 99 hwndButton1 = CreateWindow(TEXT("button"),100 TEXT("点我开始分队"),101 WS_TABSTOP | WS_CHILD | WS_VISIBLE ,102 //int( (CCW_WIDTH-CBN_WIDTH-10)/2.0 ),int(CCW_HEIGHT / 6.0 *1.5),CBN_WIDTH,CBN_HEIGHT,103 0,0,CBN_WIDTH,CBN_HEIGHT,104 hwnd,105 (HMENU)1,106 hInst,107 NULL);108 //设置字体109 LOGFONT LogFont;110 ::memset(&LogFont, 0, sizeof(LOGFONT));111 lstrcpy(LogFont.lfFaceName, "隶书");112 LogFont.lfWeight = 100;113 LogFont.lfHeight = 35;//-44; // 字体大小114 LogFont.lfCharSet = 134;115 LogFont.lfOutPrecision = 3;116 LogFont.lfClipPrecision = 2;117 LogFont.lfOrientation = 45;118 LogFont.lfQuality = 1;119 LogFont.lfPitchAndFamily = 2;120 121 // 创建字体122 hFont = CreateFontIndirect(&LogFont);123 // 设置控件字体124 SendMessage(hwndButton1, WM_SETFONT, (WPARAM)hFont, 0); 125 return 0;126 case WM_COMMAND:127 wmId = LOWORD(wParam); 128 wmEvent = HIWORD(wParam);129 switch(wmId){130 case 1: 131 teamnum++;132 133 for(i=1;i<=SUM;i++) //判断有没有编号可以分配了134 if(!allnum[i])135 break;136 if(i>SUM){137 MessageBox(NULL,TEXT("已没有编号可分配,请重新开始"),TEXT("ERROR"),MB_ICONERROR);138 break;139 }140 141 for(i=1;i<=TEAMNUM;i++){ //从剩下的编号中随机抽取5个编号142 while(1){143 num = rand()%SUM + 1; 144 if(!allnum[num]) //没被使用145 break;146 }147 allnum[num]=true;148 sel[i]=num;149 }150 151 p=0; //team[]字符数组的伪指针152 //先将确定的是第几队放入数组中153 154 switch(teamnum){155 case 1:156 str = "第一队:";break;157 case 2:158 str = "第二队:";break;159 case 3:160 str = "第三队:";break;161 case 4:162 str = "第四队:";break;163 case 5:164 str = "第五队:";break;165 case 6:166 str = "第六队:";break;167 default:168 MessageBox(NULL,TEXT("对不起,没有那么多队伍分配"),TEXT("ERROR"),MB_ICONERROR);169 break;170 }171 strcpy(team,str);172 p+=7;173 174 for(i=1;i<=TEAMNUM;i++){ //将选出来的5个编号放到字符串数组中175 if(sel[i]==0)176 break;177 if(i!=1) //数字之间放置逗号178 team[p++]=',';179 t = sel[i];180 length=0;181 while(t){182 length++;183 t/=10;184 }185 t = sel[i];186 for(j=p+length-1;j>=p;j--){ //将每一位数字放入187 team[j]=t%10+'0';188 t/=10;189 }190 p+=length;191 }192 team[p]='\0';193 //MessageBox(NULL,TEXT(team),TEXT("ERROR"),MB_ICONERROR);194 DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd,AboutProc);195 break;196 default:break;197 }198 return 0;199 case WM_PAINT:200 hdc = BeginPaint(hwnd,&ps); //获得句柄201 EndPaint(hwnd,&ps);202 ReleaseDC(hwnd,hdc);203 return 0;204 case WM_DESTROY:205 PostQuitMessage(0);206 return 0;207 }208 return DefWindowProc(hwnd,message,wParam,lParam);209 }210 211 BOOL CALLBACK AboutProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) //三分题的题目显示窗口212 {213 HWND hwndStatic;214 215 switch (message){216 case WM_INITDIALOG :217 hwndStatic = GetDlgItem(hDlg,IDC_STATIC1);218 SetWindowText(hwndStatic, team);219 return TRUE ;220 case WM_COMMAND :221 switch (LOWORD (wParam)){222 case IDOK : 223 break;224 case IDCANCEL :225 EndDialog (hDlg, 0) ;226 return TRUE ;227 }228 break;229 default:break;230 }231 return FALSE ;232 }
Freecode :