五筆反查工具

2022-03-23 06:36:53 字數 3116 閱讀 8389

1. 五筆反查工具

先放幾張圖,再來分享做這東西時遇到的難點。

2. 字根圖

一共有6763張字根圖,如果直接發布,顯然不美觀。因此有必要打包下,再發布。可惜的是,在網上沒找到合適的打包工具(如果知道,還請告訴偶一下》_

記錄檔案偏移用以下這個類表示:

struct fileindex ;
假如我將1.gif,2.gif打包到0.zero這個檔案中,那麼0.zero的檔案結構應該是這樣的

(2) (fileindex) (fileindex) (content of 1.gif) (content of 2.gif)

上面的2表示一共有兩個檔案或者兩個fileindex,第乙個fileindex就是第1.gif的資訊,第二個fileindex是2.gif的資訊,接著的是1.gif和2.gif的內容

具體的打包**如下:

//

將strsrcdirectory目錄下的全部檔案打包到strdestfile中

bool cfilepack::makepack(const std::string& strsrcdirectory, const std::string& strdestfile)

dword dwsize = arfilelist.size();

fwrite(&dwsize, 1, 4, fp); //

寫入一共有幾個檔案

fileindex* pfilelist = new fileindex[arfilelist.size()];

fwrite(pfilelist, 1, arfilelist.size() * sizeof(fileindex), fp); //

先預留一塊地方儲存檔案偏移資訊

//按順序打包檔案

for (int i = 0; i < arfilelist.size(); ++i)

dword fsize = filelength(fileno(fbuf));

pfilelist[i].dwsize = fsize;

pfilelist[i].dwoffset = ftell(fp);

char* buf = new

char[fsize];

fread(buf, 1, fsize, fbuf);

fclose(fbuf);

fwrite(buf, 1, fsize, fp);

delete buf;}//

將檔案的偏移資訊寫到之前預留的地方

fseek(fp, 4, seek_set);

fwrite(pfilelist, 1, arfilelist.size() * sizeof(fileindex), fp);

fclose(fp);

delete pfilelist;

return true;

}

打好包,要取出來也很簡單:先讀出全部的fileindex,再根據檔名查詢到相應的fileindex,最後根據偏移值和檔案大小就能將原來的內容讀出來了。

3. 顯示gif

字根圖全是gif格式的,mfc自帶的picture控制項不支援gif格式,所以。。。不幸中的萬幸,第三方顯示支援很容易就能找到。經過一番比較後,最後選擇的是pictureex。原因是pictureex很小,只有乙個標頭檔案和乙個cpp檔案。此外,使用也很方便:呼叫load(路徑),再呼叫draw()就能將圖顯示出來了。不過前面已經將全部打包成乙個檔案了,難道使用時還要將內容讀出來,再寫到xx.gif上嗎?回答這個問題前,先來看下load有哪些過載形式吧

//

loads a picture from a file

load(_t("mypic.gif"));

bool load(lpctstr szfilename);

//loads a picture from a global memory block (allocated by globalalloc)

//warning: this function does not free the global memory, pointed to by hglobal

bool load(hglobal hglobal, dword dwsize);

//loads a picture from a program resource

load(makeintresource(idr_mypic),_t("giftype"));

bool load(lpctstr szresourcename,lpctstr szresourcetype);

//

顯示filename指定的

void cwubifangcha_zerodlg::display86zigen(cstring filename)

lpvoid pvdata = globallock(hglobal);

if( pvdata == null )

memcpy(pvdata, buf, ifilesize);

globalunlock(hglobal);

m_86zigen.load(hglobal, ifilesize); //

讀內容 m_86zigen.draw(); //

顯示delete buf;

::globalfree(hglobal);

}filename.releasebuffer();

}

4. 資源

a. pictureex

b. 五筆反查_零式 v1.0

c. mfc42d.dll的介紹

2011.12.25下午更新

感謝lcs-帥提出的無法執行問題。缺少的mfc42d.dll是debug版才需要的dll,現在改成了release版本,並用了靜態編譯。

98五筆86五筆及五筆字體口訣字根表

五筆字根口訣 86版 a區 11 g 王旁青頭戔 兼 五一,12 f 土士二幹十寸雨。二一還有革字底 13 d 大犬三羊古石廠,羊有直斜套去大 14 s 木丁西,15 a 工戈草頭右框七。b區 21 h 目具上止卜虎皮,22 j 日早兩豎與蟲依。23 k 口與川,字根稀,24 l 田甲方框四車力。2...

fedora 安裝五筆

非常簡單 因為fedora 12 現在的輸入法使用的是ibus,使用yum 來看一下ibus的包。root localhost yum list grep ibus 找到了很多,其中有乙個 ibus table wubi.noarch 這個就是我們要的了。root localhost yum ins...

五筆碼表 86

a區 11 g 王旁青頭戔 兼 五一,12 f 土士二幹十寸雨。二一還有革字底 13 d 大犬三羊古石廠,羊有直斜套去大 14 s 木丁西,15 a 工戈草頭右框七。b區 21 h 目具上止卜虎皮,22 j 日早兩豎與蟲依。23 k 口與川,字根稀,24 l 田甲方框四車力。25 m 山由貝,下框幾...