重绘图标缓存 |
答題得分者是:dllee
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
小弟将使用Delphi写的重绘图标缓存代码转移到BCB中,发现在BCB中没有达到原来的效果:
下面是原来能实现重绘图标缓存的Delphi代码:
uses
......,Registry; //要包含它 ...
procedure TForm1.Button1Click(Sender: TObject);
var
MyIcon: integer;
begin
MyIcon := GetSystemMetrics(SM_CXICON);
with TRegIniFile.Create('Control Panel\Desktop') do
try
WriteString('WindowMetrics','Shell Icon Size',IntToStr(MyIcon - 1));
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0);
WriteString('WindowMetrics','Shell Icon Size',IntToStr(MyIcon));
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0);
finally
Free;
end;
end;
接着是我转移到BCB后的代码:
在头文件中包含
#include
------
人生在勤,不索何获? |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 小弟将使用Delphi写的重绘图标缓存代码转移到BCB中,发现在BCB中没有达到原来的效果: 下面是原来能实现重绘图标缓存的Delphi代码:看起來有問題的地方只有「字串」 TRegistryIniFile *RegIni = new TRegistryIniFile("Control Panel\\Desktop"); 在 C/C 中,要表示 \ 在雙引號內要用 "\\" 例如:"C:\\Windows\\System32\\" 來表示 C:\Windows\System32\ 目錄路徑。 因為 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0); 有正常發出,所以您會看到刷新桌面。 對了,提醒您,在 post 程式原始碼時,可以用 {code} 程式原始碼{/code} 將 code 包起來,那內縮的效果才會保留,這樣別人才容易看懂您的問題。請將 {code} 的 { } 改 [ ] 或是在發表文章時,按一下格式按鈕中的 「#」按鈕。可以先到 發言測試區 http://delphi.ktop.com.tw/forum.asp?FORUM_ID=911 去測試一下。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/06/23 22:00:58uses ......,Registry; //要包含它 ... procedure TForm1.Button1Click(Sender: TObject); var MyIcon: integer; begin MyIcon := GetSystemMetrics(SM_CXICON); with TRegIniFile.Create('Control Panel\Desktop') do try WriteString('WindowMetrics','Shell Icon Size',IntToStr(MyIcon - 1)); SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0); WriteString('WindowMetrics','Shell Icon Size',IntToStr(MyIcon)); SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0); finally Free; end; end;接着是我转移到BCB后的代码: 在头文件中包含#include在BCB中的这段代码编译和运行的时候都不会出错,但就是不能实现原来Delphi中能实现的效果,它只是刷新桌面,但就是不重绘图标缓存,我想肯定是BCB中的这段代码有问题,但是我实在是找不出来,还请大家能指出我的错误,万分感谢了!!! 人生在勤,不索何获?
------
http://www.ViewMove.com |
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
dll大大,我再冒昧问您一些类似的问题:
在BCB中,比如AnsiString str1 = "KTop"是代表str1被赋值,其内容是(KTop),那如果是AnsiString str1 = 'KTop'又是代表什么意思呢?
还有为什么有时要对char数组进行大小的确定呢,另我疑惑的代码如下:
AnsiString GetText(HWND hWnd) { AnsiString Text; if(hWnd) { char *buf; int Length = (int)SendMessage(hWnd,WM_GETTEXTLENGTH,0,0); //得到文本的长度 if(Length) { buf = new char[Length 2]; //当我把Length 2替换为MAX_PATH或者256时,就莫名其妙的出问题,是不是真的要确定其大小呢 buf[Length] = '\0'; buf[Length 1] = '\0'; //我把这里的'\0'换成了"\0",就出现编译时错误,说是: Cannot convert 'char *' to 'char',它的意思是不是说对指针赋值不能直接用" "的形式,还有这里加\0干嘛? SendMessage(hWnd,WM_GETTEXT,Length 1,(LPARAM)buf); Text = buf; delete buf; } } return Text; }再比如: [code] HWND hDesktop = GetDesktopWindow(); AnsiString tmp; TTreeNode *Root = TreeView1->Items->Add(NULL,tmp); Root->Data = (void *)hDesktop; //我就是不能理解这样赋值也能行的道理,hDesktop是一个unsigned int型的啊,是被强制转化为void *型的了吗?这样也行啊?帮助中不是写了__property void * Data = {read=FData, write=SetData}的吗? dllee大大,又麻烦您了,问题提的比较弱智,请原谅我这个菜鸟的无知 人生在勤,不索何获?
------
人生在勤,不索何获? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |