当前位置:首页 > 实验指导(C++面向对象部分)
char str[80]; //int count=5;
HINSTANCE hInst;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // 窗口过程函数原型声名
LRESULT CALLBACK MyDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); //对话框窗口函数
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
hInst=hInstance;
//**1.开始设计窗口类**设计窗口的特征 WNDCLASS wndclass ; // 窗口类
wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; //设计时确定回调函数. wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon(hInstance,
(LPCTSTR)IDI_MyIcon); //LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; //数据类型的强制转换。
wndclass.lpszMenuName = (LPCTSTR)IDR_TEST; //NULL ; //无菜单,用null。
wndclass.lpszClassName = \ // 窗口类名,给窗口类起的名字
//**2.注册窗口类**
if (!RegisterClass (&wndclass)) // 注册窗口,通常是注册成功的。 {
MessageBox (NULL, \窗口注册失败!\ return 0 ; }
//**3.创建窗口**
HWND hwnd ; // 定义窗口句柄,标示那个窗口被创建了#
hwnd = CreateWindow (\ // 窗口类名 \我的窗口\ // 窗口标题 WS_OVERLAPPEDWINDOW /*& ~WS_MAXIMIZEBOX*/, // 窗口样式,层叠
CW_USEDEFAULT, // 窗口最初的 x 位置
CW_USEDEFAULT, // 窗口最初的 y 位置
CW_USEDEFAULT, // 窗口最初的 x 大小
CW_USEDEFAULT,
// 窗口最初的 y 大小
NULL, // 父窗口句柄,没有父窗口,设置null
NULL, // 窗口菜单句柄,没有菜单,设置null
hInstance, // 应用程序实例句柄
NULL) ;
// 创建窗口的参数,在WM_CREATE消息发生时作为附加参数传入的一个指针。
//**4.显示窗口**
ShowWindow (hwnd, nCmdShow) ; // 显示窗口 UpdateWindow (hwnd) ; // 更新窗口,刷新窗口,包括窗口的客户区
//**5.进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环。
MSG msg ; // 消息
while (GetMessage (&msg, NULL, 0, 0))
//GetMessage从应用程序消息队列(每个应用程序都有)中取消息。 {
TranslateMessage (&msg) ;
// 转换某些键盘消息,如WM_kEYDOWN,WM_KEYUP到WM_CHAR消息的转换。没有这个函数,得不到转换后的消息。 DispatchMessage (&msg) ;
// 将收到的消息发送给窗口过程,这里是WndProc。先给操作系统,再由操作系统调用窗口函数,处理消息。 }
return msg.wParam ; }
//-----------------------WinMain结束----------------------------------------------------------
//-----------------------回调函数开始----------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) //参考WindowProc {
int wmId, wmEvent; switch (message) {
case WM_COMMAND:
wmId = LOWORD(wParam); //wParam参数的低位包含控件的标示
wmEvent = HIWORD(wParam);
//wParam高位为控件产生的通知代码,lParam指向控件的句柄 // Parse the menu selections: switch (wmId) {
case IDM_MYDIALOG:
DialogBox(hInst, (LPCTSTR)IDD_MYDLG, hwnd, (DLGPROC)MyDlgProc); break;
case IDM_EXIT:
DestroyWindow(hwnd); break; default:
return DefWindowProc(hwnd, message, wParam, lParam); }
break;
case WM_CREATE: // 窗口创建产生的消息 return 0 ; case WM_CHAR:
char szChar[20];
sprintf(szChar,\我按下的是字符 %c\wParam); //C语言库函数
// int sprintf( char *buffer, const char *format [, argument] ... );
// *buffer缓冲区;*format格式化串;[, argument]参数
MessageBox(hwnd,szChar,\消息框\
return 0 ;
case WM_PAINT: //# // count++; // int x,y; //x=count*5; //y=count*5;
HDC hdc; //DC(device context:设备上下文)句柄
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
strcpy(str,\我在窗体上显示一些信息\ TextOut(hdc, 10, 10, str, strlen(str)); EndPaint(hwnd, &ps); return 0 ; case WM_LBUTTONDOWN:
MessageBox(hwnd,\消息框\
hdc=GetDC(hwnd); //同哪一个窗口相关的DC
TextOut(hdc,0,50,\鼠标左键被按了!\鼠标左键被按了!\
ReleaseDC(hwnd,hdc);
//释放一个设备上下文句柄。注意一定要释放,hdc是资源占用内存,防治内存泄漏
return 0 ; case WM_CLOSE:
if(IDYES==MessageBox(hwnd,\是否真的结束?\消息框\ //判断点击按钮返回值。# {
DestroyWindow(hwnd);
//销毁指定窗口,调用结束后窗口退出了,应用程序并没有退出。并发送WM_DESTROY消息
}
return 0 ;
case WM_DESTROY: // 当窗口关闭时产生的消息 PostQuitMessage (0) ;
//PostQuitMessage用于退出程序,参数为应用程序退出码。发出WM_QUIT.使消息循环判断条件为假,退出循环,结束程序。 return 0 ; default:
共分享92篇相关文档