剪貼簿 |
尚未結案
|
jason_cyl329
高階會員 發表:123 回覆:155 積分:105 註冊:2003-05-26 發送簡訊給我 |
有關剪貼簿的問題,Win2000中,要貼上時,抓取區塊的大小正確,
可是在98/me中抓取區塊的大小卻是錯誤的,是不是我用錯了,或是其他原因,有關Copy /Paste的部分,其中有一列程式在paste內,BlkSize =
GlobalSize(PasteHandle);
BlkSize的值與當初設定的不同!!
可參考下面的程式碼,下面的格式是我自訂的,你也可以轉成文字的資料試試看,最主要的是GlobalSize這個函數抓回的值與原來GlobalAlloc()┌不一樣
敬請指教!! ///複製
void __fastcall TInst::ToCopyBlock(void)
{
unsigned int CopyStart,CopyEnd;
TClipboard *CopyClip;
unsigned char* CopyBlk;
long BlkSize;
HDC CopyHandle; //先將所要備份的資料大小計算出來
CopyStart = MemoryPostFind(BkMinLine,CodeMem,MemorySize,0,0); CopyEnd = MemoryPostFind(BkMaxLine,CodeMem,MemorySize,BkMinLine,CopyStart); // memcpy(regnum.chnum,CodeMem CopyEnd,2);
CopyEnd = CommandCatch(CodeMem,CopyEnd);
BlkSize = CopyEnd-CopyStart; //再外部記憶區配置一區域
CopyHandle = GlobalAlloc(GHND,BlkSize); CopyBlk = (unsigned char*)GlobalLock(CopyHandle); memcpy(CopyBlk,CodeMem CopyStart,BlkSize); GlobalUnlock(CopyHandle); CopyClip = new TClipboard; CopyClip->Open();
//將剪貼簿內的資料清空,並會將原來剪貼簿內所存的引數所在的記憶體資料清除
CopyClip->Clear();
//註冊自用的剪貼簿格式
// CF_MYFORMAT = RegisterClipboardFormat("CF_MYFORMAT");
//
CopyClip->SetAsHandle(WplMain->CF_INST,(unsigned int)CopyHandle); CopyClip->Close(); delete CopyClip;
} //貼上
void __fastcall TInst::ToPasteBlock(void)
{
TClipboard *PasteClip;
// unsigned short CF_MYFORMAT;
unsigned char* CopyBlk;
HDC PasteHandle;
unsigned char* PasteBlk;
long BlkSize; PasteClip = new TClipboard;
PasteClip->Open(); if (PasteClip->HasFormat(WplMain->CF_INST))
{
//得到剪貼簿的引數
PasteHandle = (HDC)PasteClip->GetAsHandle(WplMain->CF_INST);
//得到剪貼的資料起始位置
PasteBlk = (unsigned char*)GlobalLock(PasteHandle);
//得到剪貼簿內的資料大小
BlkSize = GlobalSize(PasteHandle);
if (CurPt BlkSize>MemorySize)
{
ShowMessage(MsgList->Strings[20]);
// return;
}
else
{
// DataFillin(CodeMem,CurPt,MemorySize,CodeTail,PasteBlk,BlkSize); if (InsTest(CurPt,MemorySize,CodeTail,BlkSize))
{
UndoAdd();
//
BlockIns(CodeMem,CurPt,CodeTail,MemorySize,PasteBlk,BlkSize);
}
}
//
GlobalUnlock(PasteHandle);
}
PasteClip->Close();
delete PasteClip; }
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 有關剪貼簿的問題,Win2000中,要貼上時,抓取區塊的大小正確, 可是在98/me中抓取區塊的大小卻是錯誤的,是不是我用錯了,或是其他原因,有關Copy /Paste的部分,其中有一列程式在paste內,BlkSize = GlobalSize(PasteHandle); BlkSize的值與當初設定的不同!! 可參考下面的程式碼,下面的格式是我自訂的,你也可以轉成文字的資料試試看,最主要的是GlobalSize這個函數抓回的值與原來GlobalAlloc()┌不一樣 敬請指教!!不算是回答您的問題,因為我沒用過 GlobalSize,GlobalAlloc... 我只知道 TClipboard 是不需要 new 的,直接使用內建的 Clipboard 即可,當然還是要///複製 void __fastcall TInst::ToCopyBlock(void) { unsigned int CopyStart,CopyEnd; TClipboard *CopyClip; unsigned char* CopyBlk; long BlkSize; HDC CopyHandle; //先將所要備份的資料大小計算出來 CopyStart = MemoryPostFind(BkMinLine,CodeMem,MemorySize,0,0); CopyEnd = MemoryPostFind(BkMaxLine,CodeMem,MemorySize,BkMinLine,CopyStart); // memcpy(regnum.chnum,CodeMem CopyEnd,2); CopyEnd = CommandCatch(CodeMem,CopyEnd); BlkSize = CopyEnd-CopyStart; //再外部記憶區配置一區域 CopyHandle = GlobalAlloc(GHND,BlkSize); CopyBlk = (unsigned char*)GlobalLock(CopyHandle); memcpy(CopyBlk,CodeMem CopyStart,BlkSize); GlobalUnlock(CopyHandle); CopyClip = new TClipboard; CopyClip->Open(); //將剪貼簿內的資料清空,並會將原來剪貼簿內所存的引數所在的記憶體資料清除 CopyClip->Clear(); //註冊自用的剪貼簿格式 // CF_MYFORMAT = RegisterClipboardFormat("CF_MYFORMAT"); // CopyClip->SetAsHandle(WplMain->CF_INST,(unsigned int)CopyHandle); CopyClip->Close(); delete CopyClip; } //貼上 void __fastcall TInst::ToPasteBlock(void) { TClipboard *PasteClip; // unsigned short CF_MYFORMAT; unsigned char* CopyBlk; HDC PasteHandle; unsigned char* PasteBlk; long BlkSize; PasteClip = new TClipboard; PasteClip->Open(); if (PasteClip->HasFormat(WplMain->CF_INST)) { //得到剪貼簿的引數 PasteHandle = (HDC)PasteClip->GetAsHandle(WplMain->CF_INST); //得到剪貼的資料起始位置 PasteBlk = (unsigned char*)GlobalLock(PasteHandle); //得到剪貼簿內的資料大小 BlkSize = GlobalSize(PasteHandle); if (CurPt BlkSize>MemorySize) { ShowMessage(MsgList->Strings[20]); // return; } else { // DataFillin(CodeMem,CurPt,MemorySize,CodeTail,PasteBlk,BlkSize); if (InsTest(CurPt,MemorySize,CodeTail,BlkSize)) { UndoAdd(); // BlockIns(CodeMem,CurPt,CodeTail,MemorySize,PasteBlk,BlkSize); } } // GlobalUnlock(PasteHandle); } PasteClip->Close(); delete PasteClip; } #includeP.S. 記得用 [code] 原始碼 [/code] 將原始碼包起來,這樣內縮及大於小於的符號才會正常秀出,會比較好看喔。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/07/01 14:11:30
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |