实验指导(C++面向对象部分)

发布时间 : 星期一 文章实验指导(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:

联系合同范文客服:xxxxx#qq.com(#替换为@)