Windows程序设计实验报告模板- 副本
更新时间:2023-09-11 02:42:01 阅读量: 教育文库 文档下载
Windows程序设计实验报告 Technology Chmistry Experiment Report
学生所在学院:软件学院 学生所在班级:软件工程2班 学生姓名:韩娜娜
指导教师:穆云峰、李季辉、 李可、 王艳芬
教 务 处 2016年 5 月
Windows程序设计实验报告
目录
1.概述 ................................................................................................................................... 2
一、实验目的 ............................................................................................................... 2 二、实验内容 ............................................................................................................... 2 三、 功能分析 ............................................................................................................. 2 四、窗口 ....................................................................................................................... 2 五、模块分解 ............................................................................................................... 3 2. 主窗口 .............................................................................................................................. 3
一、菜单的创建 ........................................................................................................... 3 二、子窗口创建 ........................................................................................................... 5 三、画笔宽度对话框 ................................................................................................... 6 四、主要代码 ............................................................................................................... 7 3. 工作区窗口 .................................................................................................................... 10
一、结构体定义 ......................................................................................................... 10 二、 绘图函数(drawfun.cpp) ............................................................................. 11
1. 鼠标落下 ....................................................................................................... 11 2. 鼠标弹起 ....................................................................................................... 12 3. 鼠标移动 ....................................................................................................... 13 三、 重绘 ................................................................................................................... 13
1.drawfun.cpp ................................................................................................... 13 2.graphicfile.cpp ........................................................................................... 16 四、 文件打开与保存 ............................................................................................... 18
1.drawwnd.cpp ................................................................................................... 18 2. PopFile.cpp ................................................................................................. 19 3. Graphicfile.cpp ......................................................................................... 20 五、 主要代码 ........................................................................................................... 20 4. 颜色选择窗口 ................................................................................................................ 23
一、颜色选择窗口创建 ............................................................................................. 23 二、 把鼠标选中的颜色传递给绘图区 ................................................................... 24 三、主要代码 ............................................................................................................. 24 5. 工具栏窗口和工具选择窗口 ........................................................................................ 28
一、工具选择的实现 ................................................................................................. 28 二、把鼠标选中的工具传递给绘图区 ..................................................................... 29 三、主要代码 ............................................................................................................. 29 6.实验总结 .......................................................................................................................... 37
一、实验结果 ............................................................................................................. 37 二、感想体会 ............................................................................................................. 37
1
Windows程序设计实验报告
1.概述
一、实验目的
掌握用C/C++语言采用API在Windows平台下编写软件的方法,熟悉消息驱动的本质;熟悉Windows平台基本控件的本质、熟悉动态链接库的使用,加深对课堂知识的掌握。
二、实验内容
仿照Windows操作系统附件的绘图软件设计一个绘图程序,依次为程序增加绘图函数、菜单选择、工具选择、颜色选择、文件操作等功能,可以在此基础上进行扩充,最终完成一个相对完整的绘图程序。
三、功能分析
1.实现曲线,直线,矩形,椭圆图形的绘制;
2.实现图形线条宽度,颜色的改变以及矩形和椭圆的填充; 3.对绘制图形的保存以及,对以保存的文件的打开和另存; 4.清屏功能。
四、窗口
窗口类 szWindowClass(主窗口) szDrawWndClass(工作区窗口) szColorBoxClass(颜色选择窗口) szToolBtnClass(工具选择窗口) szToolboxClass(工具栏窗口) 对应的处理函数 WndProc() WndDrawProc() ColorBoxProc() ToolBtWndProc() ToolboxWndProc()
2
Windows程序设计实验报告
五、模块分解
根据程序运行时的操作来划分,本程序可大致分为三大功能模块,分别为调色板,工具箱,工作区绘图,如下: 1.调色板模块
本模块用来提供绘图时的颜色的选择,并将改变后的颜色显示在调色板颜色示例的矩形区域中。 2.工具箱模块
本模块用来提供绘图时工具的选择,当选择了某一工具后,该工具按钮是选中状态,其他按钮是凸起状态。 3.工作区绘图模块
本模块用来提供鼠标完成各种图形的绘制的区域。
2.主窗口 一、菜单的创建
case WM_COMMAND:
wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) {
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, break;
case IDM_EDIT_PENWIDTH://把线的宽度传到对话框里
} break;
if(IsWindowVisible(hWndColor))
3
(DLGPROC)About);
if (DialogBoxParam(hInst, (LPCTSTR)IDD_DLG_PENWIDTH, hWnd, {
(DLGPROC)DlgPenWidth,(LPARAM)&iPenWidth)==IDOK)
SendMessage(hWndDraw,WM_CHANGEPENWIDTH,(WPARAM)0,(LPARAM)iPenWidth);
case IDM_VIEW_COLOR://如果颜色被选中则显示,如果不被选中则不显示
Windows程序设计实验报告
{
ShowWindow(hWndColor,SW_HIDE);
CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYCOMMAND|MF_UNCHECKED);
} else {
ShowWindow(hWndColor,SW_SHOWNORMAL);
CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYCOMMAND|MF_CHECKED);
} break;
if(IsWindowVisible(Tb.hwndToolbox)) {
ShowWindow(Tb.hwndToolbox,SW_HIDE);
case IDM_VIEW_TOOLS://如果工具被选中则显示,如果不被选中则不显示
CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYCOMMAND|MF_UNCHECKED);
} else {
ShowWindow(Tb.hwndToolbox,SW_SHOWNORMAL);
CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYCOMMAND|MF_CHECKED);
} break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break;
4
case IDM_FILE_NEW://新建
case IDM_FILE_OPEN://打开
case IDM_FILE_SAVE://保存
case IDM_FILE_SAVEAS://另存为
Windows程序设计实验报告
}
case IDM_EDIT_CLEAR://清空
// MessageBox(hWnd,TEXT(\
SendMessage(hWndDraw,message,wParam,lParam); break;
case IDM_EXIT:
SendMessage(hWnd,WM_CLOSE,(WPARAM)0,(LPARAM)0); break; default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
二、子窗口创建 1.case WM_CREATE:
hWndDraw=CreateDrawWindod(hWnd,((LPCREATESTRUCT)(lParam))->hInstance,2); hWndColor=CreateColorSelectDlg(NULL,(WS_CHILD|WS_VISIBLE),hWnd,NULL,hWndDraw); InitToolBox(&Tb,((LPCREATESTRUCT)(lParam))->hInstance,hWnd,hWndDraw); hMenu=GetMenu(hWnd); break;
2.HWND CreateDrawWindod(HWND hWndParent,HINSTANCE hInstance,UINT controlId) { return
CreateWindow(szDrawWndClass,NULL,WS_CHILD|WS_BORDER|WS_VISIBLE,0,0,0,0,hWndParent,(HMENU)controlId,hInstance,NULL); }
3.HWND CreateColorSelectDlg(LPCTSTR lpWindowName,DWORD dwStyle,HWND hWndParent,HINSTANCE hInstance,HWND hWndSendTo) { return
CreateWindow(szColorBoxClass,lpWindowName,dwStyle,0,0,0,0,hWndParent,NULL,hInstance,(LPVOID)hWndSendTo); }
5
Windows程序设计实验报告
三、画笔宽度对话框
LRESULT CALLBACK DlgPenWidth(HWND hDlg, UINT message, WPARAM wParam, LPARAM
lParam) {
}
6
HWND hWndSpin; INT wmId;
static INT *piPenWidth; switch (message) {
case WM_INITDIALOG:
piPenWidth=(INT *)(lParam);
hWndSpin=GetDlgItem(hDlg,IDC_SPIN_PENWIDTH); SetDlgItemInt(hDlg,IDC_PENWIDTH,*piPenWidth,FALSE);
SendMessage(hWndSpin,UDM_SETRANGE ,(WPARAM)0,(LPARAM)MAKELONG (10 , return TRUE;
1));
case WM_COMMAND:
{ } break;
}
return TRUE;
EndDialog(hDlg, LOWORD(wParam)); break;
EndDialog(hDlg, LOWORD(wParam)); break; BOOL bSuccessed; wmId=LOWORD(wParam); switch (wmId) {
case IDOK:
*piPenWidth=GetDlgItemInt(hDlg,IDC_PENWIDTH,&bSuccessed,FALSE);
case IDCANCEL:
return FALSE;
Windows程序设计实验报告 } 四、主要代码
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc;
static HWND hWndColor,hWndDraw; static DRAWSTRU ds; static TOOLBOX Tb; static HMENU hMenu; static INT iPenWidth=2; switch (message) {
case WM_COMMAND:
wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) {
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, break;
case IDM_EDIT_PENWIDTH://把线的宽度传到对话框里
7
(DLGPROC)About);
if (DialogBoxParam(hInst, (LPCTSTR)IDD_DLG_PENWIDTH, hWnd, {
(DLGPROC)DlgPenWidth,(LPARAM)&iPenWidth)==IDOK)
SendMessage(hWndDraw,WM_CHANGEPENWIDTH,(WPARAM)0,(LPARAM)iPenWidth);
} break;
if(IsWindowVisible(hWndColor)) {
ShowWindow(hWndColor,SW_HIDE);
case IDM_VIEW_COLOR://如果颜色被选中则显示,如果不被选中则不显示
Windows程序设计实验报告
CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYCOMMAND|MF_UNCHECKED);
} break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break;
SendMessage(hWndDraw,message,wParam,lParam); break; } else {
ShowWindow(Tb.hwndToolbox,SW_SHOWNORMAL); } break;
if(IsWindowVisible(Tb.hwndToolbox)) {
ShowWindow(Tb.hwndToolbox,SW_HIDE); } else {
ShowWindow(hWndColor,SW_SHOWNORMAL);
CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYCOMMAND|MF_CHECKED);
case IDM_VIEW_TOOLS://如果工具被选中则显示,如果不被选中则不显示
CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYCOMMAND|MF_CHECKED);
case IDM_FILE_NEW://新建
case IDM_FILE_OPEN://打开
case IDM_FILE_SAVE://保存
case IDM_FILE_SAVEAS://另存为
case IDM_EDIT_CLEAR://清空
// MessageBox(hWnd,TEXT(\
SendMessage(hWndDraw,message,wParam,lParam);
8
Windows程序设计实验报告 );
}
break; case IDM_EXIT:
SendMessage(hWnd,WM_CLOSE,(WPARAM)0,(LPARAM)0); break; default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYCOMMAND|MF_UNCHECKED); break;
CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYCOMMAND|MF_UNCHECKED); break;
case TOOLHIDE:
case WM_HIDECOLORBOX:
case WM_SIZE:
if(GetWindowLong(hWndColor,GWL_STYLE)&WS_CHILD) {
RECT rt;
GetWindowRect(hWndColor,&rt); ScreenToClient(hWnd,(LPPOINT)&rt); ScreenToClient(hWnd,(LPPOINT)&rt+1);
MoveWindow(hWndDraw,0,rt.bottom,LOWORD(lParam),HIWORD(lParam)-rt.bottom,TRUE
} else
MoveWindow(hWndDraw,0,0,LOWORD(lParam),HIWORD(lParam),TRUE); break;
hdc = BeginPaint(hWnd, &ps); RECT rt;
GetClientRect(hWnd, &rt); EndPaint(hWnd, &ps); break;
case WM_PAINT:
case WM_CLOSE:
if(MessageBox(hWnd,TEXT(\确定退出吗?\),TEXT(\提示信息
9
Windows程序设计实验报告
{ }
VOID ToolboxDrawBitmap(PTOOLBOX pTb,HDC hDC,INT tool) {
HDC hMemDC; HBITMAP hbmOld;
35
PTOOLBOX pTb; case WM_CREATE:
pTb=(PTOOLBOX)(((LPCREATESTRUCT)lParam)->lpCreateParams); SetWindowLong(hwnd,GWL_USERDATA,(LONG)pTb); break;
//* Select the tool that was clicked on. pTb=(PTOOLBOX)GetWindowLong(hwnd,GWL_USERDATA);
ToolboxSelectTool(pTb,(UINT)GetWindowLong((hwnd), GWL_ID)); break; { } break;
return DefWindowProc(hwnd, msg, wParam, lParam);
HDC hDC; PAINTSTRUCT ps;
pTb=(PTOOLBOX)GetWindowLong(hwnd,GWL_USERDATA); hDC = BeginPaint(hwnd, &ps);
ToolboxDrawBitmap(pTb,hDC, (UINT)GetWindowLong((hwnd), GWL_ID)); EndPaint(hwnd, &ps);
switch (msg) {
case WM_LBUTTONDOWN:
case WM_PAINT:
default:
}
return 0;
Windows程序设计实验报告
hMemDC = CreateCompatibleDC(hDC);
hbmOld = (HBITMAP)SelectObject(hMemDC, (tool ==pTb->icurTool) ?
pTb->aTools[tool].hbmToolBtnDown : pTb->aTools[tool].hbmToolBtnUp);
BitBlt(hDC, 0, 0, pTb->cxToolBtn,pTb->cyToolBtn, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hbmOld); DeleteDC(hMemDC); }
VOID ToolboxSelectTool(PTOOLBOX pTb,INT tool) {
if (pTb->icurTool != tool) { if (pTb->hwndToolbox) {
InvalidateRect(GetDlgItem(pTb->hwndToolbox, pTb->icurTool), NULL, FALSE);
InvalidateRect(GetDlgItem(pTb->hwndToolbox, tool), NULL, FALSE);
}
pTb->icurTool = tool;
pTb->pMouseDown = pTb->aTools[pTb->icurTool].pMouseDown; }
pTb->pMouseMove = pTb->aTools[pTb->icurTool].pMouseMove; pTb->pMouseUp = pTb->aTools[pTb->icurTool].pMouseUp; pTb->bFill = pTb->aTools[pTb->icurTool].bFill;
SendMessage(pTb->hWndWork,WM_TOOLCHANGE,(WPARAM)pTb,(LPARAM)0L);
}
36
Windows程序设计实验报告
6.实验总结
一、实验结果
二、感想体会
通过老师对windows程序设计的讲解和自己的学习,掌握了消息队列以及循环队列的知识,掌握了窗口消息的处理和响应,对windows API有了更深入的理解。
总的来说,这次学习收获还是很大的。这个程序通过老师一点一点的讲解,一点一点往里加东西,逐渐变成了一个大程序,相对于我以前编的代码,程序还是比较大的。让我对大程序有了一定的认识,对模块化编程有了一定的了解,不再那么害怕编程了,谢谢老师!
37
Windows程序设计实验报告
static TCHAR szColorBoxClass[]=TEXT(\); ATOM ColorSelectDlgRegisterClass(HINSTANCE hInstance) { }
//------------------颜色选择窗口----------------------------
LRESULT CALLBACK ColorBoxProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {
HDC hdc; PAINTSTRUCT ps; COLORREF color; HBRUSH hbr,hbrOld; RECT rt;
INT x,y,i,nRow,nCol; POINT pt;
static INT nWidth,nHeight; static INT nMargin; static INT cxColorBox; static INT xColorBoxStart; static INT yColorBoxStart; static INT nColorCols; static INT nColorRows;
25
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); wcex.style
= CS_HREDRAW | CS_VREDRAW; = 0; = 0;
= hInstance; = NULL;
=(HBRUSH)(COLOR_WINDOW+1);
wcex.cbClsExtra wcex.cbWndExtra wcex.hInstance wcex.hIcon
wcex.hCursor wcex.hIconSm
= LoadCursor(NULL, IDC_ARROW); = NULL;
wcex.hbrBackground
wcex.lpfnWndProc=(WNDPROC)ColorBoxProc; wcex.lpszClassName=szColorBoxClass; wcex.lpszMenuName=NULL; if (!RegisterClassEx(&wcex))
return FALSE; return TRUE;
Windows程序设计实验报告
static INT nColorCount;
static DWORD *argbCurrent; static DWORD argbDefaultColor[] = { };
static HWND hWndSendTo; switch (msg) { case WM_CREATE:
hWndSendTo=(HWND)(((LPCREATESTRUCT)(lParam))->lpCreateParams); argbCurrent=argbDefaultColor; nMargin=5; cxColorBox=30;
xColorBoxStart=nMargin; yColorBoxStart=nMargin; nColorRows=2; nColorCols=14; nColorCount=28;
nWidth=nMargin*2+cxColorBox*nColorCols; nHeight=nMargin*2+cxColorBox*nColorRows; pt.x=0; pt.y=0;
if(!(GetWindowLong(hWnd,GWL_STYLE)&WS_CHILD))
ClientToScreen(GetParent(hWnd),&pt);
26
RGB(255, 255, 255), RGB(0, 0, 0), RGB(192, 192, 192), RGB(128, 128, 128), RGB(255, 0, 0), RGB(128, 0, 0), RGB(255, 255, 0), RGB(128, 128, 0), RGB(0, 255, 0), RGB(0, 128, 0), RGB(0, 255, 255), RGB(0, 128, 128), RGB(0, 0, 255), RGB(0, 0, 128), RGB(255, 0, 255), RGB(128, 0, 128), RGB(255, 255, 128), RGB(128, 128, 64), RGB(0, 255, 128), RGB(0, 64, 64), RGB(128, 255, 255), RGB(0, 128, 255), RGB(128, 128, 255), RGB(0, 64, 128), RGB(255, 0, 128), RGB(64, 0, 128), RGB(255, 128, 64), RGB(128, 64, 0)
rt.top=pt.y;
Windows程序设计实验报告
rt.left=pt.x;
rt.bottom=pt.y+nHeight; rt.right=pt.x+nWidth;
AdjustWindowRect(&rt,GetWindowLong(hWnd,GWL_STYLE),FALSE);
MoveWindow(hWnd,rt.left,rt.top,rt.right-rt.left,rt.bottom-rt.top,TRUE); break;
hdc = BeginPaint(hWnd, &ps); x=xColorBoxStart; y=yColorBoxStart;
for(i=1;i<=nColorCount;i++) { }
EndPaint(hWnd, &ps); break;
pt.x=GET_X_LPARAM(lParam); pt.y=GET_Y_LPARAM(lParam);
nCol=(pt.x-xColorBoxStart)/cxColorBox; nRow=(pt.y-yColorBoxStart)/cxColorBox;
if((nCol>=0 && nCol i=nCol*nColorRows+nRow; 27 case WM_PAINT: hbr=CreateSolidBrush(argbCurrent[i-1]); hbrOld=(HBRUSH)SelectObject(hdc,hbr); Rectangle(hdc,x,y,x+cxColorBox,y+cxColorBox); SelectObject(hdc,hbrOld); DeleteObject(hbr); if(i%nColorRows) { } else { } y=yColorBoxStart; x+=cxColorBox; y+=cxColorBox; case WM_LBUTTONDOWN: Windows程序设计实验报告 } } } color=argbCurrent[i]; SendMessage(hWndSendTo,WM_CHANGECOLOR,(WPARAM)0,(LPARAM)color); break; ShowWindow(hWnd,SW_HIDE); SendMessage(GetParent(hWnd),WM_HIDECOLORBOX,(WPARAM)0,(LPARAM)0); break; return DefWindowProc(hWnd, msg, wParam, lParam); case WM_CLOSE: default: return 0; //-----------------颜色选择窗口---------------------- HWND CreateColorSelectDlg(LPCTSTR lpWindowName,DWORD dwStyle,HWND hWndParent,HINSTANCE hInstance,HWND hWndSendTo) { return CreateWindow(szColorBoxClass,lpWindowName,dwStyle,0,0,0,0,hWndParent,NULL,hInstance,(LPVOID)hWndSendTo); } 5.工具栏窗口和工具选择窗口 一、工具选择的实现 工具栏的每个图标对应两个位图,鼠标弹起和落下对应两个不同的位图。 for (i = 0; i < pTb->iToolBtnCount; i++) { if (!(pTb->aTools[i].hbmToolBtnUp= LoadBitmap(pTb->hInst, if (!(pTb->aTools[i].hbmToolBtnDown = LoadBitmap(pTb->hInst, MAKEINTRESOURCE(pTb->aTools[i].idbmToolBtnDown)))) return; 28 MAKEINTRESOURCE(pTb->aTools[i].idbmToolBtnUp)))) return; Windows程序设计实验报告 } 二、把鼠标选中的工具传递给绘图区 case WM_LBUTTONDOWN: VOID ToolboxSelectTool(PTOOLBOX pTb,INT tool) { if (pTb->icurTool != tool) { if (pTb->hwndToolbox) { InvalidateRect(GetDlgItem(pTb->hwndToolbox, pTb->icurTool), NULL, FALSE); InvalidateRect(GetDlgItem(pTb->hwndToolbox, tool), NULL, FALSE); } pTb->icurTool = tool; pTb->pMouseDown = pTb->aTools[pTb->icurTool].pMouseDown; } pTb->pMouseMove = pTb->aTools[pTb->icurTool].pMouseMove; pTb->pMouseUp = pTb->aTools[pTb->icurTool].pMouseUp; pTb->bFill = pTb->aTools[pTb->icurTool].bFill; SendMessage(pTb->hWndWork,WM_TOOLCHANGE,(WPARAM)pTb,(LPARAM)0L); //* Select the tool that was clicked on. pTb=(PTOOLBOX)GetWindowLong(hwnd,GWL_USERDATA); ToolboxSelectTool(pTb,(UINT)GetWindowLong((hwnd), GWL_ID)); } 三、主要代码 void InitToolBox(PTOOLBOX pTb,HINSTANCE hInstance,HWND hWnd,HWND hWndWork) { strcpy(pTb->szAppIniFile,\); strcpy(pTb->szAppName,TEXT(\)); strcpy(pTb->szTBName,TEXT(\)); pTb->hInst=hInstance; // Store instance handle in our global variable pTb->bIsVisuable=TRUE; pTb->yBegin=0; pTb->hwndMain=hWnd; 29 Windows程序设计实验报告 pTb->hWndWork=hWndWork; pTb->iToolboxColumns=2; pTb->iToolBtnCount=6; pTb->iToolFirst=0; pTb->iToolLast=pTb->iToolBtnCount-1; pTb->icurTool=pTb->iToolFirst+1; pTb->aTools=aTools; pTb->aTools[TOOL_PENCIL].hcur = LoadCursor(hInstance, MAKEINTRESOURCE(IDCUR_PENCIL)); pTb->aTools[TOOL_LINE].hcur = pTb->aTools[TOOL_RECT].hcur = pTb->aTools[TOOL_SOLIDRECT].hcur = pTb->aTools[TOOL_CIRCLE].hcur = pTb->aTools[TOOL_SOLIDCIRCLE].hcur = } VOID ToolboxCreate(PTOOLBOX pTb) { BITMAP bmp; INT i; INT x; INT y; INT cx; INT cy; RECT rc; RECT rcClient; POINT pt; /* 30 LoadCursor(hInstance, MAKEINTRESOURCE(IDCUR_CROSS)); ToolboxSelectTool(pTb,pTb->iToolFirst); ToolboxCreate(pTb); ToolboxShow(pTb,pTb->bIsVisuable); UINT cxToolBtn,cyToolBtn; Windows程序设计实验报告 * Load the bitmaps. */ for (i = 0; i < pTb->iToolBtnCount; i++) { } /* * Get the dimensions of the tool button bitmaps. */ GetObject(pTb->aTools[0].hbmToolBtnUp, sizeof(BITMAP), (PSTR)&bmp); cxToolBtn=pTb->cxToolBtn= bmp.bmWidth; cyToolBtn=pTb->cyToolBtn= bmp.bmHeight; rc.left = 0; rc.top = 0; rc.right = PALETTEMARGIN + ((pTb->cxToolBtn - 1) * pTb->iToolboxColumns) + 1 + rc.bottom = PALETTEMARGIN + ((pTb->cyToolBtn - 1) * ((pTb->iToolBtnCount +pTb->iToolboxColumns-1)/ pTb->iToolboxColumns)) + 1 if (!(pTb->aTools[i].hbmToolBtnUp= LoadBitmap(pTb->hInst, if (!(pTb->aTools[i].hbmToolBtnDown = LoadBitmap(pTb->hInst, MAKEINTRESOURCE(pTb->aTools[i].idbmToolBtnDown)))) return; MAKEINTRESOURCE(pTb->aTools[i].idbmToolBtnUp)))) return; PALETTEMARGIN; + PALETTEMARGIN; AdjustWindowRect(&rc, TOOLBOXSTYLE, FALSE); cx = rc.right - rc.left; cy = rc.bottom - rc.top; GetClientRect(pTb->hwndMain, &rcClient); pt.x = rcClient.right - cx - (2 * PALETTEMARGIN); pt.y = rcClient.top + pTb->yBegin + (2 * PALETTEMARGIN); ClientToScreen(pTb->hwndMain, &pt); SetRect(&rc, pt.x, pt.y, pt.x + cx, pt.y + cy); FitRectToScreen(&rc); x = rc.left; 31 Windows程序设计实验报告 y = rc.top; // } } VOID ToolboxShow(PTOOLBOX pTb,BOOL fShow) { } VOID ToolboxUpdate(PTOOLBOX pTb) { if (!pTb->hwndToolbox) 32 if (!(pTb->hwndToolbox = CreateWindow(szToolboxClass, pTb->szTBName, x, y, cx, cy,pTb->hwndMain, NULL,pTb->hInst,(LPVOID)pTb ))) return; TOOLBOXSTYLE, x = PALETTEMARGIN; y = PALETTEMARGIN; for (i = 0; i ToolboxUpdate(pTb); CreateWindow(szToolBtnClass, NULL, } else { } x = PALETTEMARGIN; y += pTb->cyToolBtn - 1; WS_CHILD | WS_VISIBLE, x, y,pTb->cxToolBtn,pTb->cyToolBtn, pTb->hwndToolbox, (HMENU)i,pTb->hInst, (LPVOID)pTb ); x +=pTb->cxToolBtn - 1; if ((i+1)%pTb->iToolboxColumns) { if (fShow) ShowWindow(pTb->hwndToolbox, SW_SHOWNA); ShowWindow(pTb->hwndToolbox, SW_HIDE); else Windows程序设计实验报告 } return; pTb->iToolLast =pTb->iToolBtnCount-1; ToolboxSelectTool(pTb,pTb->iToolFirst); LRESULT CALLBACK ToolboxWndProc( { PTOOLBOX pTb; switch (msg) { case WM_CREATE: { } break; { HDC hdc; PAINTSTRUCT ps; hdc = BeginPaint(hwnd, &ps); DrawMarginBorder(hwnd, hdc); 33 HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) pTb=(PTOOLBOX)(((LPCREATESTRUCT)lParam)->lpCreateParams); SetWindowLong(hwnd,GWL_USERDATA,(LONG)pTb); HMENU hmenu = GetSystemMenu(hwnd, FALSE); RemoveMenu(hmenu, 7, MF_BYPOSITION); // Second separator. RemoveMenu(hmenu, 5, MF_BYPOSITION); // First separator. RemoveMenu(hmenu, SC_RESTORE, MF_BYCOMMAND); RemoveMenu(hmenu, SC_SIZE, MF_BYCOMMAND); RemoveMenu(hmenu, SC_MINIMIZE, MF_BYCOMMAND); RemoveMenu(hmenu, SC_MAXIMIZE, MF_BYCOMMAND); RemoveMenu(hmenu, SC_TASKLIST, MF_BYCOMMAND); case WM_PAINT: Windows程序设计实验报告 } } } EndPaint(hwnd, &ps); break; pTb=(PTOOLBOX)GetWindowLong(hwnd,GWL_USERDATA); ToolboxShow(pTb,FALSE); pTb->bIsVisuable= FALSE; SendMessage(pTb->hwndMain,TOOLHIDE,(WPARAM)0,(LPARAM)0); break; { } break; return DefWindowProc(hwnd, msg, wParam, lParam); INT i; pTb=(PTOOLBOX)GetWindowLong(hwnd,GWL_USERDATA); for (i = 0; i < pTb->iToolBtnCount; i++) { } pTb->hwndToolbox = NULL; DeleteObject(pTb->aTools[i].hbmToolBtnUp); pTb->aTools[i].hbmToolBtnUp = NULL; DeleteObject(pTb->aTools[i].hbmToolBtnDown); pTb->aTools[i].hbmToolBtnDown = NULL; case WM_CLOSE: case WM_DESTROY: default: return 0; LRESULT CALLBACK ToolBtnWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 34
正在阅读:
区教育局2022年依法行政工作自查报告08-02
中厚板轧制过程分层递阶智能控制05-17
2022-2022学年人教版九年级物理 第十九章 第一节 家庭电路04-19
地铁顶板防水涂料施工方法及注意事项11-24
2022学年八年级生物下册 第23章 第4节 生态系统的稳定性同步练习04-09
样卷答案410-11
新课标人教版四年级语文下册 6 万年牢 教学设计 板书设计及教学反思07-23
2008年全国新课标数学高考试卷+答案04-27
下大雨作文450字07-07
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 副本
- 程序设计
- 模板
- Windows
- 实验
- 报告
- 2018-2022年中国健康医疗大数据市场调查与投资前景预测报告(定制版)目录
- 2016年继承传统文化的室内设计方法每日一讲(9月5日)
- 网神SecGate3600防火墙用户手册解析
- 机械制造工艺学课程设计
- 大工16秋《机械加工基础》在线作业3
- 案例3
- 机电设备安装工程招标文件(样本)
- 白莲中学做好关爱留守儿童工作的实
- 春季坐月子的宝妈要如何安排饮食
- PADS经常会遇到的问题技巧 - 图文
- 2014年教师资格证考试必知面试技巧
- 中国男装长裤行业市场调查研究报告(目录) - 图文
- 2018年中国石灰氮现状分析及市场前景预测(目录) - 图文
- 2016届河北定州中学高三上学期第一次月考化学试题(解析版)
- 苏州餐厨垃圾处理工程项目可行性研究报告
- 教科版九年级物理上册《第三章 认识电路》期末复习考点梳理 - 图文
- 中级财务会计 借款费用练习及答案
- 和田县英艾日克乡财政所办公楼工程施工组织设计
- 河南师范大学附属中学高二5月月考理科综合物理试题
- 真空排水联合堆载预压施工方案 - 图文