| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 958 人关注过本帖
标题:求助,一个简单界面程序的问题
只看楼主 加入收藏
行走
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-7-26
收藏
 问题点数:0 回复次数:3 
求助,一个简单界面程序的问题
代码如下:其它地方没问题,就是下面有黄色注释的那一行有问题。
#include<windows.h>
#define MAXPOINTS 1000;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
 static TCHAR szAppName[]=TEXT("CONNECT");
 HWND hwnd; //窗口句柄
 MSG msg; //消息结构,
 WNDCLASS wndclass; //窗口类,是一个结构体,下面的这些都是结构体变量
 wndclass.style=CS_HREDRAW | CS_VREDRAW;//类风格标识符
 //这风格指定在窗口大小改变后,使整个窗口无效
 wndclass.lpfnWndProc=WndProc; //lpfn前缀代表指向函数的指针,这里指向 窗口过程函数
 wndclass.cbClsExtra=0; //cb前缀代表 count of bytes(字节数)
 wndclass.cbWndExtra=0;//这两个域用于在类结构和Windows内部保存的窗口结构中预留一些额外空间
 wndclass.hInstance=hInstance; //h前缀代表句柄,程序的实例句柄
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为窗口设置的图标
 //LoadIcon 获取预先定义的图标句柄,第一个参数为null,第二个参数标识图标
 //如果是加载程序员定制的图标时(图标应该保存磁盘上的.EXE程序文件中)
 //这个参数应该是程序的实例句柄hInstance
 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//hbr前缀代表 刷子的句柄
 wndclass.lpszMenuName=NULL;//lpsz前缀代表指向以0结尾的字符串的长指针,窗口类菜单,这里没有。
 wndclass.lpszClassName=szAppName; // 窗口类名
 if(!RegisterClass(&wndclass))
 {
  //如果注册不成功,则很可能是定义了unicode标识符在Windows98下运行。
  //Windows98不支持,它只支持很少的unicode函数,messagebox 是一个。
  MessageBox(NULL,TEXT("程序无法在非windows NT内核系统中运行!"),szAppName,MB_ICONERROR);
  return 0;
 }
 hwnd=CreateWindow(szAppName,TEXT("CONNECT"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
 /*
    hwnd=CreateWindow(szAppName,  //window class name
  TEXT("The hello program"),//window caption
  WS_OVERLAPPEDWINDOW,      //window style
  CW_USEDEFAULT,            //initial x position
  CW_USEDEFAULT,            //initial y position
  CW_USEDEFAULT,            //initial x size
  CW_USEDEFAULT,            //initial y size
  NULL,                     //parent window handle
  NULL,                     //window menu handle
  hInstance,                //program instance handle
  NULL);                    //creation parameters
  // 可以用这个指针访问以后想要引用的程序中的数据
 */

    //createwindow 调用后,Windows内部已经创建了这个窗口,但是并未在视频显示器上显示
 ShowWindow(hwnd,iCmdShow);//第一个参数:刚创建的窗口句柄,
 //第二个参数:确定最初 如何在屏幕上显示窗口
 //如果是SHOWNORMAL,则窗口的客户区域就被窗口类中定义的背景刷子所覆盖
 UpdateWindow(hwnd);
    //导致客户区被绘制,它通过给窗口过程发送WM_PINT消息来做到这点。
 //为什么showwindow不一步到位显示到屏幕中?窗口过程的作用将显现出来。
 //因为窗口客户区经常变,其他区不常该。
 while(GetMessage(&msg,NULL,0,0))
 {
  //只要从消息队列中取出的message域不为WM_QUIT,getmessage就返回一个非零值
  //GetMessage(&msg,NULL,0,0) 第2 3 4 个参数设为null或0表示程序
  //接受它创建的所有窗口的所有消息
  TranslateMessage(&msg);//将msg结构传给Windows,进行一些键盘转换
  DispatchMessage(&msg);//又将msg结构回传给Windows。然后Windows
  //将该消息发送给适当的窗口过程
 }
 return msg.wParam; //结构的wParam域是传递给PostQuitMessage函数的值(通常是0)
}
//一个窗口过程总是与调用registerclass注册的特定窗口类相关联
//createwindow函数根据特定的窗口类创建一个窗口,但基于一个窗口类,可以创建多个窗口
//程序通常不直接调用窗口过程。窗口过程通常由Windows本身调用。
//通过调用SendMessage函数,程序能够直接调用它的窗口过程。
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{//瞧瞧它的参数,跟msg前4个参数一样
 static POINT pt[MAXPOINTS];         //就这里错误,提示“syntax error before "," token”
 int i,j;                                        // 后面还有提示说pt没声明就用了,但我在这一行已经声明了啊,
 HDC hdc;//设备描述表句柄       // 我觉得就是这句有问题才会导致下面本应正常的都报错了。
 PAINTSTRUCT ps; //PAINTSTRUCT结构中包含一些窗口过程,可以用来刷新客户区域的内容
 static int iCount;
 switch(message)
 {
  //窗口过程不予处理的所有消息应该被传给名为DefWindowProc的Windows函数
  //从DefWindowProc返回的值必须由窗口过程返回
 //case WM_CREATE:PlaySound(TEXT("Hellowin.wav"),NULL,SND_FILENAME | SND_ASYNC);
  //return 0;
  //PlaySound 第一个参数:声音文件,第二参数:当声音文件是一种资源时才被使用
  //第三个参数指定一些选项
  //窗口过程在处理消息时,必须返回0
 case WM_LBUTTONDOWN;
      iCount=0;
      InvalidateRect(hwnd,NULL,TRUE);
      return 0;
 case WM_MOUSEMOVE; //窗口消息是鼠标在显示区域中移动而产生的
      if(wParam&MK_LBUTTON&&iCount<1000)
      {
       pt[iCount].x=LOWORD(lParam);
       pt[iCount++].y=HIWORD(lParam);
       hdc=GetDC(hwnd);
       SetPixel(hdc,LOWORD(lParam),HIWORD(lParam),0);
       RleaseDC(hwnd,hdc);
       }
       return 0;
 case WM_LBUTTONUP;
      InvalidateRect(hwnd,NULL,FALSE);
      return 0;
        
 case WM_PAINT:
  hdc=BeginPaint(hwnd,&ps);//返回代号hdc,只能在ps参数指定的矩形区域中画图
  SetCursor(LoadCursor(NULL,IDC_WAIT));
  ShowCursor(TRUE);
  EndPaint(hwnd,&ps);
  for(i=0;i<iCount-1;i++)
     for(j=i+1;j<iCount;j++)
      {
       MoveToEx(hdc,pt[i].x,pt[i].y,NULL);
       LineTo(hdc,pt[i].x,pt[j].y);
       }
       ShowCursor(FALSE);
       SetCursor(LoadCursor(NULL,IDC_ARROW));
       EndPaint(hwnd,&ps);
       return 0;
 case WM_DESTROY:
  PostQuitMessage(0);//该函数在消息队列中插入WM_QUIT消息
  return 0;
 }
 return DefWindowProc(hwnd,message,wParam,lParam);
}
搜索更多相关主题的帖子: windows 界面 int 变量 
2007-11-26 00:28
行走
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-7-26
收藏
得分:0 
呵呵,问题找到了,就是一些低级错误。
#define MAXPOINTS 1000   后面不能加分号,
case WM_MOUSEMOVE等几个分支后应该加冒号,多亏了图形专区的一笔苍穹大哥啊
2007-11-26 10:44
Occing
Rank: 1
来 自:广东
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-11-18
收藏
得分:0 
不知LZ用的是什么版本啊,我用你改正后的程序也不能运行
2007-11-26 18:15
行走
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-7-26
收藏
得分:0 
我用的是Dev-cpp 4.9.9.2
2007-11-30 13:33
快速回复:求助,一个简单界面程序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023260 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved