EasyX鼠标函数和MBCS、Unicode编码

O、函数

 kbhit()
 MouseHit()

MOUSEMSG m;
m = GetMouseMsg();

 solidpolygon((POINT*)p, 3);
 putpixel(p[3][0],p[3][1],0xee00ee);
 outtextxy(296, 310, _T("BestAns"));
 setwritemode(R2_XORPEN);

SYSTEMTIME ti;
GetLocalTime(&ti);

一、鼠标

   获取按键:               获取鼠标:
   char c;                    MOUSEMSG m;
  if (kbhit())               if (MouseHit())
      c = getch();               m = GetMouseMsg();
struct MOUSEMSG
{
    UINT uMsg;      // 当前鼠标消息
    bool mkCtrl;    // Ctrl 键是否按下
    bool mkShift;   // Shift 键是否按下
    bool mkLButton; // 鼠标左键是否按下
    bool mkMButton; // 鼠标中键是否按下
    bool mkRButton; // 鼠标右键是否按下
    int x;          // 当前鼠标 x 坐标
    int y;          // 当前鼠标 y 坐标
    int wheel;      // 鼠标滚轮滚动值
};
  其中,“当前鼠标消息”可以是以下值:
//每个值类似于头文件中定义的宏,为4位十六进制数
WM_MOUSEMOVE     鼠标移动消息
WM_MOUSEWHEEL    鼠标滚轮拨动消息
WM_LBUTTONDOWN   左键按下消息
WM_LBUTTONUP     左键弹起消息
WM_LBUTTONDBLCLK 左键双击消息
WM_MBUTTONDOWN   中键按下消息
WM_MBUTTONUP     中键弹起消息
WM_MBUTTONDBLCLK 中键双击消息
WM_RBUTTONDOWN   右键按下消息
WM_RBUTTONUP     右键弹起消息
WM_RBUTTONDBLCLK 右键双击消息
 例如,判断获取的消息是否是鼠标左键按下,可以用:
if (m.uMsg == WM_LBUTTONDOWN)
...

练习:(a ^ b) ^ b = a

#include 
#include 

void main()
{
    // 初始化图形窗口
    initgraph(640, 480);
    int p[3][2];

    setwritemode(R2_XORPEN);
    MOUSEMSG m;                     // 定义鼠标消息
    while(true)
    {
        for(int i=0;i<3;)
        {
            m = GetMouseMsg();  // 获取一条鼠标消息
            if (m.uMsg == WM_LBUTTONDOWN)
            {
                p[i][0]=m.x;
                p[i][1]=m.y;
                putpixel(m.x,m.y,RED);
                i++;
            }
        }
        solidpolygon((POINT*)p, 3);


        /*
        switch(m.uMsg)
        {
            case WM_MOUSEMOVE:      // 鼠标移动的时候画红色的小点
                putpixel(m.x, m.y, RED);
                break;

            case WM_LBUTTONDOWN:    // 如果点左键的同时按下了 Ctrl 键
                if (m.mkCtrl)       // 画一个大方块
                    rectangle(m.x-10, m.y-10, m.x+10, m.y+10);
                else                // 画一个小方块
                    rectangle(m.x-5, m.y-5, m.x+5, m.y+5);
                break;

            case WM_RBUTTONUP:
                return;             // 按鼠标右键退出程序
        }*/

    }
    // 关闭图形窗口
    closegraph();
}

EasyX鼠标函数和MBCS、Unicode编码_第1张图片
二、随机数

srand((unsigned) time(NULL))
n=rand()%p;

三、知识
(1)

outtextxy(10, 20, "Hello World");

error C2665: 'outtextxy' : none of the 2 overloads could convert all the argument types

原因:

字符串常见的编码有两种:MBCS 和 Unicode。

VC6 默认使用的 MBCS 编码,而 VC2008 及高版本 VC 默认使用的 Unicode 编码。以下详细解释这个问题:

用 char 表示字符时,英文占用一个字节,中文站用两个字节。这样有一个严重的问题:两个连续字节,究竟是两个英文字符,还是一个中文字符?为了解决这个问题,Unicode 编码诞生了。Unicode 编码不管中文英文都用两个字节表示。

对于 MBCS 编码,字符变量用 char 定义。
对于 Unicode 编码中,字符变量用 wchar_t 定义。

为了提高代码的自适应性,微软在 tchar.h 里面定义了 TCHAR,而 TCHAR 会根据项目定义的编码,自动展开为 char 或 wchar_t。

 在 Windows API 和 EasyX 里面的大多数字符串指针都用的 LPCTSTR 或 LPTSTR 类型,LPCTSTR / LPTSTR 就是“Long Point (Const) Tchar STRing”的缩写。所以可以认为,LPCTSTR 就是 const TCHAR *,LPTSTR 就是 TCHAR * 。

解决:1.

(2)

error"The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch."
已经过时请使用 _getch.

你可能感兴趣的:(EasyX鼠标函数和MBCS、Unicode编码)