昨天有人向我问了两个问题,一个是MiniGUI字体(汉字)放大的问题,第二个是读取文本文件在Minigui上显示的问题。刚刚又向我问了下Minigui 中改变控件中的字体颜色的问题?改变字体颜色SetWindowElementColorEx,来改变控件前景色,背景色等。其中,前景色就控件字体颜色。
在windows.h中的定义
gal_pixel GUIAPI SetWindowElementColorEx (HWND hwnd, Uint16 item, gal_pixel new_value);
fgc_control_normal:正常状态的控件前景色. fgc_control_disabled:禁止状态的控件前景色. bkc_hilight_normal:控件选中部分的背景色。
例子:SetWindowElementColorEx
函数使用可以详见编程手册
SetWindowElementColorEx(GetDlgItem (hDlg,IDC_PROMPT_WEA_TEMPCON),FGC_CONTROL_NORMAL,RGB2Pixel(HDC_SCREEN, 255, 255, 255));
上面是设为白色
SetWindowElementColorEx(hwnd,FGC_CONTROL_NORMAL,fgcolor);

      Minigui字体放大和用的字体有关,汉字字体不是使用 TRUETYPE 的字体。,首先要修改minigui.cfg配置文件,在Truetype字体增加对中文支持的字体,默认的3个是支持英文字体放大的,然后创建字体的时候字体类型(type)用ttf类型,并且在修改配置文件的时候要把字体库拷贝到配置文件所指定的目录下,这样基本上可以达到放大字体的效果。
以下是我程序里创建逻辑字体的代码
//创建一个字体
lfSong20 = CreateLogFont ("ttf", "song", "GB2312",
                       FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
                       FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
                       30,0);
lfSong32 = CreateLogFont ("ttf", "song", "GB2312",
                       FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
                       FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
                      32, 0);
下面是CFG文件中关于ttf字体的一段
[truetypefonts]
font_number=4
name0=ttf-stxinwei-rrncnn-0-0-GB2312
fontfile0=/usr/local/lib/minigui/res/font/stxinwei.ttf
name1=ttf-arial-rrncnn-0-0-ISO8859-1
fontfile1=/usr/local/lib/minigui/res/font/arial.ttf
name2=ttf-times-rrncnn-0-0-ISO8859-1
fontfile2=/usr/local/lib/minigui/res/font/times.ttf
name3=ttf-pinball-rrncnn-0-0-ISO8859-1
fontfile3=/usr/local/lib/minigui/res/font/pinball.ttf

下面是我在主函数中建立逻辑字体的代码
lfSong32 = CreateLogFont ("ttf", "stxinwei", "GB2312",
                       FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
                       FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,
                      32, 0);
把字体拷过去,放在了板子根文件系统的usr/local/lib/minigui/res/font/目录下

       第二个问题是因为那个文本文件里有换行、TAB 键、空格等字符,所以你读取的时候那些字符会在Minigui显示出方框,如何把这些方框去掉,向这些字符属于控制字符,读取的去掉这些控制字符就可以了。
int iFirst=-1,iLast;
for(i=0; caption[i]!='\0'; i++)
{ printf(caption[i]);
  if(iscntrl(caption[i]) !=0)
   {
      iLast = i;
      if((iLast-iFirst) > 1)
      {
       //把这个i的位置记住
        break;
      }
      else
      {
       iFirst = iLast;
      }
    }
}

增加有关Minigui的几个问题:
1、$ ./helloworld  
 此时提示出错:./helloworld: error while loading shared libraries: libminigui-1.6.so.9: cannot open shared object file: No such file or directory
 但在/usr/local/minigui/lib中安装了libminigui-1.6.so.9文件。

    找到/etc下的ld.so.conf文件,加入/usr/local/lib,保存,执行ldconfig
2、启动程序时出错:
NEWGAL: Set video mode failure.
GDI: Can not initialize graphics engine!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
Video mode smaller than requested

原因:qvfb中的显示设置与MiniGUI.cfg中的显示设置不一样所致,修改成一样就可以了


 


 


下面列出一些ctype.h里的函数
@函数名称:     isalpha
函数原型:     int isalpha(int ch);
函数功能:     检查ch是否是字母.
函数返回:     1是字母返回 ,否则返回 0.
参数说明:
所属文件      <ctype.h>

#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1='*';
      char ch2='a';
      if(isalnum(ch1)!=0)
        printf("%c is the ASCII number or alphebet\n",ch1);
      else
        printf("%c is not the ASCII number nor alphebet\n",ch1);
      if(isalnum(ch2)!=0)
        printf("%c is the ASCII number or alphebet\n",ch2);
      else
        printf("%c is not the ASCII number nor alphebet\n",ch2);
    return 0;
}


@函数名称:     iscntrl
函数原型:     int iscntrl(int ch);
函数功能:     检查ch是否控制字符(其ASCII码在0和0x1F之间,数值为 0-31).
函数返回:     是返回 1,否则返回 0.
参数说明:
所属文件:     <ctype.h>

#include <stdio.h>
#include <ctype.h>

char chars[]={'A',0x09,'Z'};
#define SIZE sizeof(chars)/sizeof(char)

int main()
{
    int i;
    for(i=0;i<SIZE;i++){
        printf("Char %c is %sa Control character\n",
        chars,(iscntrl(chars))?"":"not");
    }
    return 0;
}


@函数名称:     isdigit
函数原型:     int isdigit(int ch);
函数功能:     检查ch是否是数字(0-9)
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>

#include <stdio.h>
#include <ctype.h>

int main()
{
       char ch1='1';
       char ch2='a';
       if(isdigit(ch1)!=0)
            printf("%c is the ASCII number\n",ch1);
       else
            printf("%c is not the ASCII number\n",ch1);
       if(isdigit(ch2)!=0)
            printf("%c is the ASCII number\n",ch2);
       else
            printf("%c is not the ASCII number\n",ch2);
    return 0;
}


@函数名称:     isgraph
函数原型:     int isgraph(int ch);
函数功能:     检查ch是否可显示字符(其ASCII码在ox21到ox7E之间),不包括空格
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>

#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1=' ';
      char ch2='a';
      if(isgraph(ch1)!=0)
        printf("%c is the ASCII printable character\n",ch1);
      else
        printf("%c is not the ASCII printable character\n",ch1);
      if(isgraph(ch2)!=0)
        printf("%c is the ASCII printable character\n",ch2);
      else
        printf("%c is not the ASCII printable character\n",ch2);
    return 0;
}

@函数名称:     islower
函数原型:     int islower(int ch);
函数功能:     检查ch是否小写字母(a-z)
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

char chars[]={'A','a','z','Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()
{
    int i;

    for(i=0;i<SIZE;i++){
        printf("Char %c is %sa lowercase character\n",chars,(islower(chars))?"":"not");
    }
    return 0;
}


@函数名称:     tolower
函数原型:     int tolower(int ch);
函数功能:     将ch字符转换为小写字母
函数返回:     返回ch所代表的字符的小写字母
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
      char x='a', y='b',z='A',w='*';
      printf("Character %c to lower is %c\n",x,tolower(x));
      printf("Character %c to lower is %c\n",y,tolower(y));
      printf("Character %c to lower is %c\n",z,tolower(z));
      printf("Character %c to lower is %c\n",w,tolower(w));
    return 0;
}


@函数名称:     toupper
函数原型:     int toupper(int ch);
函数功能:     将ch字符转换成大写字母
函数返回:     与ch相应的大写字母
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
      char x='a', y='b',z='A',w='*';
      printf("Character %c to upper is %c\n",x,toupper(x));
      printf("Character %c to upper is %c\n",y,toupper(y));
      printf("Character %c to upper is %c\n",z,toupper(z));
      printf("Character %c to upper is %c\n",w,toupper(w));
    return 0;
}


@函数名称:     isalnum
函数原型:     int isalnum(int ch);
函数功能:     检查ch是否是字母或数字
函数返回:     是字母或数字返回1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1 ='*';
      char ch2 ='a';
      if(isalnum(ch1)!=0)
        printf("%c is the ASCII number or alphebet\n",ch1);
      else
        printf("%c is not the ASCII number nor alphebet\n",ch1);
      if(isalnum(ch2)!=0)
        printf("%c is the ASCII number or alphebet\n",ch2);
      else
        printf("%c is not the ASCII number nor alphebet\n",ch2);
    return 0;
}

@函数名称:     isprint
函数原型:     int isprint(int ch);
函数功能:     检查ch是否是可打印字符(包括空格),其ASCII码在ox20到ox7E之间
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1='\n';
      char ch2='a';
      if(isprint(ch1)!=0)
        printf("%c is the ASCII printable charcater\n",ch1);
      else
        printf("%c is not the ASCII printable charcater\n",ch1);
      if(isprint(ch2)!=0)
        printf("%c is the ASCII printable charcater\n",ch2);
      else
        printf("%c is not the ASCII printable charcater\n",ch2);
    return 0;
}


@函数名称:     ispunct
函数原型:     int ispunct(int ch);
函数功能:     检查ch是否是标点字符(不包括空格),即除字母,数字和空格以外的所有可打印字符
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1=',';
      char ch2='a';
      if(ispunct(ch1)!=0)
        printf("%c is the ASCII punct\n",ch1);
      else
        printf("%c is not the ASCII punct\n",ch1);
      if(ispunct(ch2)!=0)
        printf("%c is the ASCII punct\n",ch2);
      else
        printf("%c is not the ASCII punct\n",ch2);
    return 0;
}

@函数名称:     isspace
函数原型:     int isspace(int ch);
函数功能:     检查ch是否是空格符和跳格符(控制字符)或换行符
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1=' ';
      char ch2='a';
      if(isspace(ch1)!=0)
        printf("%c is the space charcater\n",ch1);
      else
        printf("%c is not the space charcater\n",ch1);
      if(isspace(ch2)!=0)
        printf("%c is the space charcater\n",ch2);
      else
        printf("%c is not the space charcater\n",ch2);
    return 0;
}


@函数名称:     isupper
函数原型:     int isupper(int ch);
函数功能:     检查ch是否是大写字母(A-Z)
函数返回:     是返回1,否则返回0
参数说明:
所属文件:     <ctype.h>

#include <stdio.h>
#include <ctype.h>

char chars[]={'A','a','z','Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()
{
    int i;
    for(i=0;i<SIZE;i++){
        printf("Char %c is %san uppercase character\n",
        chars,(isupper(chars))?"":"not");
    }
    return 0;
}


@函数名称:     isxdigit
函数原型:     int isxdigit(int ch);
函数功能:     检查ch是否是一个16进制数学字符(即0-9,或A-F,或a-f)
函数返回:     是返回 1,否则返回0
参数说明:
所属文件:     <ctype.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
      char ch1='1';
      char ch2='a';
      if(isxdigit(ch1)!=0)
        printf("%c is the ASCII hexadecimal number\n",ch1);
      else
        printf("%c is not the ASCII hexadecimal number\n",ch1);
      if(isxdigit(ch2)!=0)
        printf("%c is the ASCII hexadecimal number\n",ch2);
      else
        printf("%c is not the ASCII hexadecimal number\n",ch2);
    return 0;
}


@函数名称:     isascii
函数原型:     int isascii(int ch)
函数功能:     测试参数是否是ASCII码0-127
函数返回:     非零-是,0-不是
参数说明:     ch-被测参数
所属文件:     <ctype.h>

#include <stdio.h>
#include <ctype.h>

char chars[]={'A',0x80,'Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()
{
    int i;
    for(i=0;i<SIZE;i++)
     {
        printf("Char %c is %san ASCII character\n",
        chars,(isascii(chars))?"":"not");
    }
    return 0;
}