📄 subject_49240.htm
字号:
<br>内容:朋友,您好!代码如下:<BR><BR>//GridandCircle.cpp<BR>//////////////////////////////////////////////////////////////////////<BR>#include <windows.h><BR>#include <string.h><BR>#include <stdlib.h><BR>#include <stdio.h><BR><BR>//窗口函数声明<BR>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);<BR><BR>//////////////////////////////////////////////////////////////////////<BR>//以下代码初始化窗口类<BR>int WinMain(HINSTANCE hInstance,<BR> HINSTANCE hPrevInstance,<BR> LPSTR szCmdLine,<BR> int nCmdShow)<BR>{<BR> <BR> HWND hwnd;<BR> MSG msg;<BR> WNDCLASS wndclass;<BR> char lpszClassName[]="映象模式";<BR> char lpszTitle[]="My_Map_Mode";<BR> //窗口类风格<BR> wndclass.style = 0;<BR> //窗口处理函数为WndProc<BR> wndclass.lpfnWndProc = WndProc;<BR> //窗口类没有扩展<BR> wndclass.cbClsExtra = 0;<BR> //窗口类实例没有扩展<BR> wndclass.cbWndExtra = 0;<BR> //当前实例句柄<BR> wndclass.hInstance = hInstance;<BR> //窗口的最小化图标为默认图标<BR> wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);<BR> //窗口采用箭头光标<BR> wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);<BR> //窗口背景为白色<BR> wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);<BR> //窗口没有菜单<BR> wndclass.lpszMenuName = NULL;<BR> //窗口类名<BR> wndclass.lpszClassName = lpszClassName;<BR> //如果注册失败则发出警告声<BR> if(!RegisterClass(&wndclass))<BR> {<BR> MessageBeep(0);<BR> return FALSE;<BR> }<BR> hwnd = CreateWindow(lpszClassName,<BR> lpszTitle,<BR> WS_OVERLAPPEDWINDOW,<BR> CW_USEDEFAULT,<BR> CW_USEDEFAULT,<BR> 310,<BR> 330,<BR> NULL,<BR> NULL,<BR> hInstance,<BR> NULL);<BR> //显示窗口<BR> ShowWindow(hwnd,nCmdShow);<BR> //绘制用户区<BR> UpdateWindow(hwnd);<BR> //消息循环<BR> while(GetMessage(&msg,NULL,0,0))<BR> {<BR> TranslateMessage(&msg);<BR> DispatchMessage(&msg);<BR> }<BR> //消息循环结束(即程序终止)时将信息返回系统<BR> return msg.wParam;<BR>}<BR><BR>//////////////////////////////////////////////////////////////////////<BR>//窗口函数定义<BR>LRESULT CALLBACK WndProc(HWND hwnd,<BR> UINT message,<BR> WPARAM wParam,<BR> LPARAM lParam)<BR>{<BR> HDC hdc;<BR> static PAINTSTRUCT ps; //定义绘图信息结构<BR> static HBRUSH hB1; //定义画刷<BR> static HPEN hP1; //定义画笔<BR> static int nMode; //定义映象模式<BR> static int flags=0;<BR> static int nlbuttonx=0;<BR> static int nlbuttony=0;<BR> int i=0;<BR><BR> //消息处理语句<BR> switch (message)<BR> {<BR> case WM_CREATE:<BR> flags=0;<BR> nMode=MM_TEXT;<BR> hB1=(HBRUSH)GetStockObject(BLACK_BRUSH);<BR> break;<BR> //单击鼠标左键更改映象模式为MM_ISOTROPIC<BR> case WM_LBUTTONDOWN:<BR> flags=1;<BR> nMode=MM_ISOTROPIC;<BR> nlbuttonx=LOWORD(lParam); //当前鼠标的x轴坐标<BR> nlbuttony=HIWORD(lParam); //当前鼠标的y轴坐标<BR> hB1=(HBRUSH)GetStockObject(BLACK_BRUSH);<BR> InvalidateRect(hwnd,NULL,0); //刷新客户区<BR> break;<BR> //单击鼠标右键更改映象模式为MM_ANISOTROPIC<BR> case WM_RBUTTONDOWN:<BR> flags=1;<BR> nMode=MM_ANISOTROPIC;<BR> nlbuttonx=LOWORD(lParam); //当前鼠标的x轴坐标<BR> nlbuttony=HIWORD(lParam); //当前鼠标的y轴坐标<BR> hB1=CreateSolidBrush(RGB(0,255,0)); //创建绿色的画刷<BR> InvalidateRect(hwnd,NULL,0); //刷新客户区<BR> break;<BR> //当客户区的一部分或全部变为无效以致必须刷新时,将由这个消息通知程序<BR> case WM_PAINT:<BR> hdc = BeginPaint(hwnd,&ps); //取得设备环境句柄<BR> SetMapMode(hdc,nMode); //设置映象模式<BR> SetWindowExtEx(hdc,300,300,NULL); //设置窗口区域<BR> SetWindowOrgEx(hdc,0,0,NULL); //设置视口原点<BR> SetViewportExtEx(hdc,300,300,NULL); //设置视口区域<BR> hP1=CreatePen(PS_INSIDEFRAME,2,RGB(125,125,125));//创建灰色画笔<BR> SelectObject(hdc,hP1); //当前画笔为hP1选入设备环境<BR> SelectObject(hdc,hB1); //当前画刷为hB1选入设备环境<BR> if(flags)<BR> {<BR> SetMapMode(hdc,nMode); //设置映象模式<BR> //在指定点以指定的大小画圆<BR> Ellipse(hdc,<BR> (nlbuttonx/30)*30,<BR> (nlbuttony/30)*30,<BR> (nlbuttonx/30)*30+30,<BR> (nlbuttony/30)*30+30);<BR> }<BR> else<BR> {<BR> for(i=30;i<=300;)<BR> {<BR> MoveToEx(hdc,i,0,NULL);//直线的起始点坐标<BR> LineTo(hdc,i,300);//直线的终点坐标<BR> i=i+30;<BR> }<BR> for(i=30;i<=300;)<BR> {<BR> MoveToEx(hdc,0,i,NULL);//直线的起始点坐标<BR> LineTo(hdc,300,i);//直线的终点坐标<BR> i=i+30;<BR> }<BR> }<BR> EndPaint(hwnd,&ps); //释放设备环境句柄<BR> break;<BR> //退出窗口<BR> case WM_DESTROY:<BR> DeleteObject(hB1);//删除画刷<BR> DeleteObject(hP1);//删除画笔<BR> //调用PostQuitMessage函数发出WM_QUIT消息<BR> PostQuitMessage(0); <BR> break;<BR> default:<BR> return DefWindowProc(hwnd,message,wParam,lParam);<BR> }<BR> return 0;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:风之文章 回复日期:2003-08-08 11:43:10
<br>内容:加上WINAPI 就行了<BR>int WINAPI WinMain(HINSTANCE hInstance,<BR> HINSTANCE hPrevInstance,<BR> LPSTR szCmdLine,<BR> int nCmdShow)<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风之文章 回复日期:2003-08-08 11:48:46
<br>内容:在当前版本Win32 SDK中,WINAPI被定义为FAR PASCAL,因此,使用FAR PASCAL同使用WINAPI具有同样的效果,但是,我们强烈建议你使用WINAPI来代替以前常用的FAR PASCAL,因为Microsoft不保证FAR PASCAL能够在将来的Windows版本中正常工作。在目前情况下,和FAR PASCAL等价的标识符还有CALLBACK (用在如窗口过程或对话框过程之类的回调函数前)和APIENTRY等。它们对编译器而言都是一回事,最终将被解释为__stdcall。在Windows环境下编程,会遇到很多这样的情况,注意不要混淆它们。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-08-08 13:59:45
<br>内容:加上WINAPI程序就正常了。谢谢朋友的指导。<BR>我可以再问一个问题吗?上述程序运行后,点击左键没有反映,不知为什么?<BR><BR>2003-8-8 14:05:06
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -