| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:用tc实现类tc的西文下拉菜单中的关于实现鼠标功能的问题
只看楼主 加入收藏
chvjc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-9-14
收藏
 问题点数:0 回复次数:5 
用tc实现类tc的西文下拉菜单中的关于实现鼠标功能的问题
   目标是做一个类似于tc的西文下拉菜单的设计,基础程序已经做完 ,如果想实现鼠标功能的话,应该怎么做呢,希望有达人给个指点.
搜索更多相关主题的帖子: 西文 鼠标 菜单 
2007-09-18 14:17
chvjc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-9-14
收藏
得分:0 
2007-09-18 14:22
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

有关鼠标编程的资料可以在本坛搜到

2007-09-18 15:00
beyondabcd
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2007-5-19
收藏
得分:0 
2007-09-18 15:42
zmfttkl
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-7-1
收藏
得分:0 

看看这个把,是一个关于鼠标的
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>

/*鼠标信息宏定义*/
#define WAITING 0xff00
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define RIGHTPRESS 0xff02
#define RIGHTCLICK 0xff20
#define RIGHTDRAG 0xff2a
#define MIDDLEPRESS 0xff04
#define MIDDLECLICK 0xff40
#define MIDDLEDRAG 0xff4c
#define MOUSEMOVE 0xff08

int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY;


int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];

void MouseMath()/*计算鼠标的样子*/
{int i,j,jj,k;
/* long UpNum[16]={
0x3fff,0x1fff,0x0fff,0x07ff,
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f
};*/
long UpNum[16]={
0xf3ff,0xe1ff,0xe1ff,0xe1ff,
0xe001,0xe000,0xe000,0xe000,
0x8000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x8001,0xc003
};


/*long DownNum[16]={
0x0000,0x7c00,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};*/

long DownNum[16]={
0x0c00,0x1200,0x1200,0x1200,
0x13fe,0x1249,0x1249,0x1249,
0x7249,0x9001,0x9001,0x9001,
0x8001,0x8001,0x4002,0x3ffc

};
for(i=0;i<16;i++)
{
j=jj=15;
while(UpNum[i]!=0)
{
up[i][j]=UpNum[i]%2;
j--;
UpNum[i]/=2;
}
while(DownNum[i]!=0)
{
down[i][jj--]=DownNum[i]%2;
DownNum[i]/=2;
}
for(k=j;k>=0;k--)
up[i][k]=0;
for(k=jj;k>=0;k--)
down[i][k]=0;
for(k=0;k<16;k++)/*四种组合方式*/
{
if(up[i][k]==0&&down[i][k]==0)
mouse_draw[i][k]=1;
else if(up[i][k]==0&&down[i][k]==1)
mouse_draw[i][k]=2;
else if(up[i][k]==1&&down[i][k]==0)
mouse_draw[i][k]=3;
else
mouse_draw[i][k]=4;
}
}
mouse_draw[1][2]=4;/*特殊点*/
}
/*鼠标光标显示*/
void MouseOn(int x,int y)
{
int i,j;
int color;

for(i=0;i<16;i++)/*画鼠标*/
{
for(j=0;j<16;j++)
{
pixel_save[i][j]=getpixel(x+j,y+i);/*保存原来的颜色*/
if(mouse_draw[i][j]==1)
putpixel(x+j,y+i,0);
else if(mouse_draw[i][j]==2)
putpixel(x+j,y+i,15);
}
}
}
/*隐藏鼠标*/
void MouseOff()
{
int i,j,x,y,color;
x=MouseX;
y=MouseY;
for(i=0;i<16;i++)/*原位置异或消去*/
for(j=0;j<16;j++)
{
if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)
continue;
color=getpixel(x+j,y+i);
putpixel(x+j,y+i,color^color);
putpixel(x+j,y+i,pixel_save[i][j]);
}
}
/*鼠标是否加载
MouseExist:1=加载
0=未加载
MouseButton:鼠标按键数目 */
void MouseLoad()
{
_AX=0x00;
geninterrupt(0x33);
MouseExist=_AX;
MouseButton=_BX;
}

/*鼠标状态值初始化*/
void MouseReset()
{
_AX=0x00;
geninterrupt(0x33);
}

/*设置鼠标左右边界
lx:左边界
gx:右边界 */
void MouseSetX(int lx,int rx)
{
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}

/*设置鼠标上下边界
uy:上边界
dy:下边界 */
void MouseSetY(int uy,int dy)
{
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}

/*设置鼠标当前位置
x:横向坐标
y:纵向坐标 */
void MouseSetXY(int x,int y)
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}

/*设置鼠标速度(缺省值:vx=8,vy=1)
值越大速度越慢 */
void MouseSpeed(int vx,int vy)
{
_CX=vx;
_DX=vy;
_AX=0x0f;
geninterrupt(0x33);
}

/*获取鼠标按下键的信息*/
/*是否按下左键
返回值: 1=按下 0=释放*/
int LeftPress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}

/*是否按下中键
返回值同上 */
int MiddlePress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&4);
}

/*是否按下右键
返回值同上 */
int RightPress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&2);
}

/*获取鼠标当前位置*/
void MouseGetXY()
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}

int MouseStatus()/*鼠标按键情况*/
{
int x,y;
int status;
int press=0;

int i,j,color;
status=0;/*默认鼠标没又移动*/

x=MouseX;
y=MouseY;

while(x==MouseX&&y==MouseY&&status==0&&press==0)
{
if(LeftPress()&&RightPress())
press=1;
else if(LeftPress())
press=2;
else if(RightPress())
press=3;
MouseGetXY();
if(MouseX!=x||MouseY!=y)
status=1;
}
if(status)/*移动情况才重新显示鼠标*/
{
for(i=0;i<16;i++)/*原位置异或消去*/
for(j=0;j<16;j++)
{
if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)
continue;
color=getpixel(x+j,y+i);
putpixel(x+j,y+i,color^color);
putpixel(x+j,y+i,pixel_save[i][j]);
}
MouseOn(MouseX,MouseY);/*新位置显示*/
}
if(press!=0)/*有按键得情况*/
return press;
return 0;/*只移动得情况*/
}


void main()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"..\\");
MouseMath();/*计算鼠标形状,一开始必须使用,后面就不用了*/
MouseSetY(0,479);
MouseSetX(0,639);
MouseSetXY(100,100);

outtextxy(400,400,"Author: feng zi");
outtextxy(370,420,"welcome to here");
settextstyle(0,0,4);
outtextxy(100,200,"XP Mouse Demo");

MouseOn(MouseX,MouseY);/*第一次显示鼠标*/
while(!kbhit())
{
switch(MouseStatus())
{/*双键按下画黄点*/
case 1:MouseOff();
putpixel(MouseX,MouseY,YELLOW);
MouseGetXY();
MouseOn(MouseX,MouseY);break;
/*左键按下画红点*/
case 2:
MouseOff();
putpixel(MouseX,MouseY,RED);
MouseGetXY();
MouseOn(MouseX,MouseY);break;
/*右键按下画绿点*/
case 3:
MouseOff();
putpixel(MouseX,MouseY,GREEN);
MouseGetXY();
MouseOn(MouseX,MouseY);break;
default:break;
}
}
closegraph();
}


2007-09-18 19:47
zmfttkl
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-7-1
收藏
得分:0 

哦,忘说了,使用TC的!


2007-09-18 19:48
快速回复:用tc实现类tc的西文下拉菜单中的关于实现鼠标功能的问题
数据加载中...
 
   



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

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