面向对象编程技术实验报告
HDC hdc; int i,m,n,p,q;
BOOL InitWindow (HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
/******************************************************************* 函数:WinMain ()
功能:Win32 应用程序入口函数。创建主窗口,处理消息循环
********************************************************************/ int WINAPI WinMain (HINSTANCE hInstance, //当前实例句柄 HINSTANCE hPrevInstance, //前一个实例句柄 PSTR szCmdLine, //命令行字符 int iCmdShow) //窗口显示方式 { MSG msg; char *p; //创建主窗口 if (!InitWindow (hInstance, iCmdShow)) return FALSE; p=0; //进入消息循环:从该应用程序的消息队列中检取消息, //送到消息处理过程,当检取到WM_QUIT消息时,退出消息循环。 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; }
/****************************************************************** 函数:InitWindow () 功能:创建窗口。
*******************************************************************/ static BOOL InitWindow (HINSTANCE hInstance, int iCmdShow) { HWND hwnd; //窗口句柄
9
面向对象编程技术实验报告
WNDCLASS wcMainWnd; //窗口类结构 ATOM a; //填充窗口类结构 wcMainWnd.style = CS_VREDRAW | CS_HREDRAW; wcMainWnd.lpfnWndProc = WinProc; wcMainWnd.cbClsExtra = 0; wcMainWnd.cbWndExtra = 0; wcMainWnd.hInstance = hInstance; wcMainWnd.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)); wcMainWnd.hCursor = LoadCursor (NULL, IDC_ARROW); wcMainWnd.hbrBackground = (struct HBRUSH__ *)GetStockObject (WHITE_BRUSH); wcMainWnd.lpszMenuName = (LPSTR)IDR_MENU1;; wcMainWnd.lpszClassName = szAppName; LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1)); hAccel= LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1)); //注册窗口类 a = RegisterClass (&wcMainWnd); if (!a) { MessageBox (NULL, TEXT (\注册窗口类失败!\ MB_ICONERROR); return 0; } //创建主窗口 hwnd = CreateWindow (szAppName, //窗口类名称 TEXT (\简易的图形编辑器 作者:娄通\ //窗口标题 WS_OVERLAPPEDWINDOW, //窗口风格 200, //窗口位置的x坐标 200, //窗口位置的y坐标 800, //窗口的宽度 450, //窗口的高度 NULL, //父窗口句柄 NULL, //菜单句柄 hInstance, //应用程序实例句柄 NULL); //窗口创建数据指针 if( !hwnd ) return FALSE; //显示并更新窗口 ShowWindow( hwnd, iCmdShow );
10
面向对象编程技术实验报告
UpdateWindow( hwnd ); return TRUE; }
/****************************************************************** 函数:WinProc ()
功能:处理主窗口消息
*******************************************************************/
LRESULT CALLBACK WinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; RECT rect; HMENU hMenu; static BOOL bDrawing=FALSE,Line=FALSE, Rectangle=FALSE ,Ellipse=FALSE ,Text=FALSE; static HMENU hPopMenu; POINT pt; int hNewPenStyle,hNewPenWidth; int BrushColor; COLORREF hNewPenColor; static int x,y; static char a[100]; HBRUSH hNewBrush; static int k=1; static HWND hWndEdit; static LOGFONT logfont; static CHOOSEFONT cf; static HFONT hFont; static CHOOSECOLOR cc; static COLORREF crCustomColors[16]; static COLORREF crText = RGB (0, 0, 0); static HANDLE hFile; switch (message) { case WM_CREATE: //创建消息 pDrawData = new DRAWDATA; pDrawData->iSelectionFunc = IDM_FUNC_LINETO ; pDrawData->iSelectionPenColor = IDM_PEN_BLACK ; pDrawData->iSelectionPenStyle = IDM_PEN_SOLID ;
11
面向对象编程技术实验报告
pDrawData->iSelectionPenWidth = IDM_PEN_WIDTH1 ; if (pDrawData) { SetWindowLong(hWnd, 0, (LONG)pDrawData); } //初始化结构 cf GetObject (GetStockObject (SYSTEM_FONT), sizeof (LOGFONT), (PTSTR) &logfont); //初始化结构 logfont cf.lStructSize = sizeof (CHOOSEFONT); cf.hwndOwner = hWnd; cf.hDC = NULL; cf.lpLogFont = &logfont; cf.iPointSize = 0; cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_EFFECTS; cf.rgbColors = 0; cf.lCustData = 0; cf.lpfnHook = NULL; cf.lpTemplateName = NULL; cf.hInstance = NULL; cf.lpszStyle = NULL; cf.nFontType = 0; cf.nSizeMin = 0; cf.nSizeMax = 0; //初始化结构 cc cc.lStructSize = sizeof (CHOOSECOLOR); cc.hwndOwner = hWnd; cc.hInstance = NULL; cc.rgbResult = RGB (0, 0, 0); cc.lpCustColors = crCustomColors; cc.Flags = CC_RGBINIT | CC_FULLOPEN; cc.lCustData = 0; cc.lpfnHook = NULL; cc.lpTemplateName = NULL; //显示窗口标题 hPopMenu=LoadMenu(((LPCREATESTRUCT)lParam)->hInstance,MAKEINTRESOURCE(IDR_MENU1)); hPopMenu=GetSubMenu(hPopMenu,2);
12
面向对象编程技术实验报告
return 0; case WM_COMMAND: hMenu = GetMenu (hWnd) ; switch (LOWORD (wParam)) { case IDM_FILE_EXIT: SendMessage (hWnd, WM_CLOSE, 0, 0) ; return 0 ; case IDM_FILE_SAVE: SaveMyData(SaveLine,lineCount,SaveRectangle,rectangleCount,SaveEllipse,ellipseCount,SaveText,textCount); InvalidateRect (hWnd, NULL, TRUE) ; return 0; case IDM_FILE_OPEN: LoadMyData(SaveLine,lineCount,SaveRectangle,rectangleCount,SaveEllipse,ellipseCount,SaveText,textCount); InvalidateRect (hWnd, NULL, TRUE) ; return 0; case IDM_FUNC_ELLIPSE: CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_UNCHECKED) ; pDrawData->iSelectionFunc = LOWORD (wParam) ; CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_CHECKED) ; Line=FALSE; Rectangle=FALSE; Ellipse=TRUE; Text=FALSE; return 0 ; case IDM_FUNC_RECTANGLE: CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_UNCHECKED) ; pDrawData->iSelectionFunc = LOWORD (wParam) ; CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_CHECKED) ; Line=FALSE; Rectangle=TRUE; Ellipse=FALSE; Text=FALSE; return 0 ; case IDM_FUNC_LINETO: CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_UNCHECKED) ; pDrawData->iSelectionFunc = LOWORD (wParam) ; CheckMenuItem (hMenu, pDrawData->iSelectionFunc, MF_CHECKED) ; Line=TRUE; Rectangle=FALSE; Ellipse=FALSE; Text=FALSE;
13