分类目录归档:Develop

关于Windows TextOut输出文字时的一些难看的“方块”

什么是绘制实心矩形最好的方式

老一辈的程序员可能会告诉你”ExtTextOut”,性能最优。

TextOut在输出文字时,为什么有些难看的方块?

IMLangFontLink2::GetStrCodePages方法将字符串分解成许多”块“(chunk),并且在每个块中的所有字符都可以用相同的字体来显示,此外还可以通过IMLangFontLink2::MapFont来创建字体。

#include <mlang.h>

HRESULT TextOutFL(HDC hdc, int x, int y, LPCWSTR psz, int cch)
{
  ...
  while (cch > 0) {
    DWORD dwActualCodePages;
    long cchActual;
    pfl->GetStrCodePages(psz, cch, 0, &dwActualCodePages, &cchActual);
    HFONT hfLinked;
    pfl->MapFont(hdc, dwActualCodePages, 0, &hfLinked);
    HFONT hfOrig = SelectFont(hdc, hfLinked);
    TextOut(hdc, ?, ?, psz, cchActual);
    SelectFont(hdc, hfOrig);
    pfl->ReleaseFont(hfLinked);
    psz += cchActual;
    cch -= cchActual;
  }
  ...
}

下一步,应该确定每次TextOut的位置

SetTextAlign(hdc, GetTextAlign(hdc) | TA_UPDATECP);
MoveToEx(hdc, x, y, NULL);

最后,在处理从右到左(right-to-left)的语言时,IMLangFontLink2接口来将字符串分解为块,将会失败。

以下代码应该是windows文本输出的终极方案

#inlucde <usp10.h>

HRESULT TextOutUniscribe(HDC hdc, int x, int y, LPCWSTR psz, int cch)
{
  if (cch == 0) return S_OK;
  SCRIPT_STRING_ANALYSIS ssa;
  HRESULT hr = ScriptStringAnalyse(hdc, psz, cch, 0, -1, SSA_FALLBACK | SSA_GLYPHS, MAXLONG, NULL, NULL, NULL, NULL, NULL, &ssa);
  if (SUCCESS(hr))
  {
    hr = ScriptString(ssa, x, y, 0, NULL, 0, 0, FALSE);
    ScriptStringFree(&ssa);
  }
  return hr;
}

9宫格背景图在缩放时的拉伸规则

1、关于资源:提供1x,2x……等多套资源

2、资源的使用规则:<150%,使用1x资源;<250%,使用2x资源;<350%,使用3x资源,以此类推

3、如果没有2x,3x资源,使用1x资源等比放大;所有配置数据,跟随倍率等比放大

4、背景显示大小,按缩放倍率平滑放大。即放大为125时,destSize = sourceSize * 125%

5、文字显示大写与上条规则相同

===========================

图片初始化规则:

1、如果缩放倍率发生了更改,判断是否需要重新载入资源

2、判断是否需要重新创建显示缓存

某项目的linux编译

sudo apt-get install libssl-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install librsvg2-dev
sudo apt-get install libdbus-1-dev

sudo apt-get install sudo apt-get install libqt5svg5-dev
sudo apt-get install sudo apt-get install libgsettings-qt-dev
sudo apt-get install sudo qttools5-dev
sudo apt-get install fcitx fcitx-libs-dev libxtst-dev devscripts debhelper

sudo apt-get install libgsettings-qt-dev

sudo apt-get install qtdeclarative5-dev qml-module-qtquick-controls

Failed to find “GL/gl.h”
sudo apt-get install mesa-common-dev libglu1-mesa-dev

替换
#include “fcitx-qt/fcitxqtformattedpreedit.h”

#include “FcitxQtDBusAddons/fcitxqtformattedpreedit.h”

Inlucde目录添加
/usr/include/FcitxQt5/

打包相关的错误:
debuild找不到:
sudo apt-get install devscripts build-essential lintian

rpm找不到
sudo apt-get install rpm

eu-strip: command not found
apt-get install elfutils

编辑:/etc/ld.so.conf 修改后需要 ldconfig

cmake -DCMAKE_TOOLCHAIN_FILE=$cross_chain_tool_file -DCMAKE_PREFIX_PATH=/lib/x86_64-linux-gnu/cmake/Qt5 -DLD_LIBRARY_PATH=/lib/x86_64-linux-gnu -DUSE_VOICE=ON -DUSEQT5=ON ../../

linux常用命令

挂载vmware设置的共享目录: sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other

SSH GIT

1、生成:$ ssh-keygen -t rsa -C “your_email@example.com”

2、添加:ssh-add ~/.ssh/id_rsa

3、复制:~/ssh/id_rsa.pub 到gerrit或github账户中添加

GIT 保存密码 全局用户名等

git config credential.helper store
git config --global credential.helper store
git config --global user.name "github's Name"
git config --global user.email "github@xx.com"
git config --list

界面初探

  • 为什么要单击”开始”按钮来关机
    • 总揽”开始”和”结束”的入口
  • 为什么没有”专家模式”
    • 无法量化,没有办法区分哪些选项属于”专家”
  • 对话框的默认按钮是取消
    • 用户总是尽可能的去忽略这些对话框
  • 最好的设置是:及时你没有意识到这些设置的存在,但它们依然安装你所期望的方式在工作
  • 问用户无法回答的问题,是为了显示你的超群智慧吗?
  • 为什么安装程序不会问你是否希望保留操作系统文件的新版本?
    • 用户的专业度不足以回答此类问题
  • 功能设计的思考
    • ?
  • 什么时候应该禁止选项,而什么时候又该删除选项
    • 实验已经证明:当一个选项被显示出来并且处于禁止状态时,那么用户就会觉得只要他进行足够多的操作,这个选项就会被激活
  • 什么时候应该将“…”放在按或者菜单项的后面
    • 只有当某个命令需要额外的信息来执行时,才应该使用省略号。如(About)虽然是弹出对话框,但其本身就是结果,是不需要显示省略号的。
    • 参考:《Windows User Interface Design Specification And Guidelines》
  • 自动售货机的用户界面设计