亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

用C++ Builder開發動畫DLL

2019-09-06 23:33:54
字體:
來源:轉載
供稿:網友

                     
 我 們 在Windows98 環 境 下 執 行 拷 貝 文 件、 查 找 文 件 等 計 算 機 耗 時 較 長 的 操 作 時,Windows 會 顯 示 一 個 小 小 的 動 畫, 指 示 正 在 進 行 的 操 作, 與 死 板 的 靜 止 圖 像 相 比 增 色 不 少。 那 么 我 們 自 己 開 發 軟 件 時, 能 否 也 顯 示 一 個 這 樣 的 動 畫 提 示 呢 ? 筆 者 開 發 了 一 個 能 夠 在CB 下 調 用 的 動 畫DLL, 由 于 采 用 多 線 程 編 程,CB 調 用 的DLL 函 數 能 夠 及 時 將 控 制 權 交 還 給CB, 不 影 響 應 用 系 統 的 運 轉。

一、 代 碼 與 編 譯 選 項
在C + +Builder 中 創 建 一 個 空 白 的DLL 項 目。
創 建 一 個 空 白 的Form, 修 改 它 的 屬 性 為:
BorderStyle=bsDialog
BorderIcons 的 子 屬 性 均 為False
FormStyle=fsStayOnTop
Position= poScreenCenter
Name=StatusForm

在Form 上 添 加 一 個Win32 下 的Animate 控 件Animate1, 修 改 它 的 屬 性 為
Align=alTop

在Form 上 添 加 一 個Standard 下 的Button 控 件Button_Cancel, 再 添 加System 下 的Timer 控 件Timer1, 設 置 定 時Interval 時 間 位250, 較 快 響 應 用 戶 的 取 消 請 求。
----因 為PB 應 用 系 統 與 動 畫 窗 體 代 碼 分 別 屬 于 兩 個 線 程, 不 能 采 用PB 線 程 直 接 關 閉 動 畫 窗 體 線 程 的 窗 口, 否 則 會 引 起 系 統 運 行 不 正 常, 因 此 采 用PB 線 程 設 置 關 閉 標 志, 而 動 畫 線 程 采 用Timer 控 件 定 時 檢 查 標 志, 一 旦 檢 測 到 關 閉 標 志, 就 關 閉 窗 口, 清 除 線 程 標 志, 結 束 動 畫 線 程。

----5. 下 面 給 出 編 碼 及 編 碼 原 理:

----(1)DLL 主 體 代 碼:

/ *DLL 主 體 代 碼
  * 定 義DLL 公 用 變 量
*g_CommonAVI 對Animate 控 件
動 畫 類 型 索 引
?。猤i_Canceled Button_Cancel
按 鈕 是 否 被 選 擇 過
?。猤i_AVIType 要 顯 示 的 動 畫 類 型,
由DLL 輸 出 函 數 做 為 參 數 輸 入
?。猤i_RequestClose 請 求 動 畫 線 程 關 閉 標 志
?。猤i_WindowActive 動 畫 窗 口 所 處 的 狀 態
?。猯psWinTitle 動 畫 窗 體 的 標 題,
由DLL 輸 出 函 數 做 為 參 數 輸 入
?。?

   TCommonAVI g_CommonAVI[]={
    aviNone, aviFindFolder,
    aviFindFile, aviFindComputer,
   aviCopyFiles, aviCopyFile,
    aviRecycleFile, aviEmptyRecycle,
   aviDeleteFile
   };
   int gi_Canceled=0,gi_AVIType=0;
   int gi_RequestClose=0,gi_WindowActive=0;
   char lpsWinTitle[256];
   HWND hWndParent=NULL;

   / * 定 義DLL 輸 出 函 數 */
   extern “C" __declspec(dllexport) int pascal Dll
?? EntryPoint(HINSTANCE hinst, unsigned
long reason, void *);
   extern “C" __declspec(dllexport) int pascal
ShowStatus Window
(int AVIType,LPSTR WinTitle,long hWnd);
extern “C" __declspec(dllexport)
int pascal GetStatus(int ai_CloseWin);
extern “C" __declspec(dllexport)
int pascal CloseStatusWindow();

    / * 定 義 線 程TformThread: */
   class TFormThread : public TThread{
   public: // User declarations
   __fastcall TFormThread(bool CreateSuspended);
   void __fastcall Execute(void);
   };
   __fastcall TFormThread::
TFormThread(bool CreateSuspended):
TThread(CreateSuspended){
   }
/ * 動 畫 線 程 執 行 代 碼,
動 畫 窗 體 的 定 時 器 控 件 會 關 閉 它,
清 除 窗 體 存 在 標 志 后 結 束 線 程 的 運 行
*/
   void __fastcall TFormThread::Execute(void){
   gi_WindowActive=1;
    StatusForm=new TStatusForm(NULL);

    StatusForm ->Caption=lpsWinTitle;
    StatusForm ->ShowModal();
    gi_WindowActive=0;
    delete StatusForm;
    gi_RequestClose=0;
   }
   / * 定 義 一 個 線 程 實 例 指 針 */
   TFormThread *FormThread;
    / * 輸 出 函 數 代 碼 實 現 部 分
    * DllEntryPoint 32 位DLL 入 口
    * ShowStatusWindow 顯 示 動 畫 窗 口,
它 通 過 創 建 一 個 線 程 來 創 建 窗 口,
避 免 由 于 窗 口 的MODAL 屬 性 而 使
控 制 權 不 能 及 時 的 返 還 給 調 用 者
    * GetStatus 取 得“ 取 消” 狀 態,
即 用 戶 有 沒 有 選 擇“ 取 消” 按 鈕
    * CloseStatusWindow 關 閉 動 畫 窗 口,
    */
   __declspec(dllexport) int WINAPI DllEntryPoint
(HINSTANCE hinst, unsigned long reason, void *)
   {
   return 1;
   }

 __declspec(dllexport) int pascal ShowStatusWindow
(int AVIType,LPSTR WinTitle,long hWnd){
 hWndParent=(HWND)hWnd;
memset(lpsWinTitle,0,sizeof(lpsWinTitle));
 strncpy(lpsWinTitle,WinTitle,sizeof(lpsWin Title) -1);
if (AVIType>0 & & AVIType<=8) gi_AVIType="AVIType;"     FormThread="new" TFormThread(true);       FormThread ->Priority = tpNormal;
    FormThread ->Resume();
   }

 __declspec(dllexport) int pascal GetStatus
(int ai_CloseWin){
   if (gi_Canceled)
   if (gi_WindowActive){
   gi_RequestClose=1;
    while(gi_RequestClose);
    }

    return gi_Canceled;
   }

   __declspec(dllexport) int pascal CloseStatusWindow(){
    if (gi_WindowActive){
   gi_RequestClose=1;
    while(gi_RequestClose);
   }

    return gi_Canceled;
   }


----(2) 窗 體StatusForm 的 代 碼:

   TStatusForm *StatusForm;
   extern int gi_Canceled;
   extern int gi_AVIType;
   extern TCommonAVI g_CommonAVI[];
   __fastcall TStatusForm::TStatusForm
(HWND ParentWindow)
    : TForm(ParentWindow)
   {
    gi_Canceled=0;
   }
   // 取 消 按 鈕 并 不 直 接 關 閉 窗 體,
而 指 示 設 置 取 消 標 志, 供 調 用 者 查 看
   void __fastcall TStatusForm::Button_CancelClick
(TObject *Sender)
   {
   gi_Canceled=1;
   // ModalResult=mrCancel;
   }
     // 激 活 動 畫, 在FORMCREATE 事 件 中
   void __fastcall TStatusForm::FormCreate
(TObject *Sender)
   {
    Animate1 ->CommonAVI=g_CommonAVI[gi_AVI
Type];
    Animate1 ->Active = true;
   }
 
 extern int gi_RequestClose;
 // 定 時 器 事 件 檢 測 到 結 束 標 志 關 閉 窗 體
 void __fastcall TStatusForm::Timer1Timer
(TObject *Sender)
   {
    if (gi_RequestClose){
    ModalResult=mrOk;
    }
   }

v6. 設 置 編 譯 選 項: 打 開Project Options 對 話 框, 清 除Linker 屬 性 頁 中 的 Use Dynamic RTL 標 志, 清 除Packages 屬 性 頁 中 的Build with runtime packages。 這 樣 只 要 單 個DLL 就 可 以 運 行 了, 而 不 必 安 裝 一 些 動 態 連 接 運 行 時 間 庫。

二、 使 用 動 畫DLL
----1. 定 義:

   //Declare -> Global External Functions
   FUNCTION Long ShowStatusWindow
(Long AVIType,String WinTitle,long hWnd)
&LIBRARY “STATWIN.DLL" ALIAS FOR
“Show StatusWindow"

   FUNCTION Long GetCancelStatus
(Long CloseWindow) &LIBRARY
“STATWIN.DLL" ALIAS FOR “GetStatus"

   FUNCTION Long CloseStatusWindow() &
 LIBRARY “STATWIN.DLL" ALIAS FOR
“CloseStatusWindow"

----2. 調 用:

   long ll_EndTime
   // 顯 示 查 找 文 件 夾 動 畫
   ShowStatusWindow(2)
   setpointer(HourGlass!)

   ll_EndTime = Cpu() + 10 * 1000
   DO
    if GetCancelStatus(0)=1 then
    exit
   end if
    // 做 想 做 的 事 情
   LOOP UNTIL cpu() > ll_EndTime

   CloseStatusWindow()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频中文字幕| 国产精品视频免费在线观看| 国产精品自产拍在线观| 欧美一区二区三区精品电影| 92福利视频午夜1000合集在线观看| 亚洲视频在线免费观看| 久久99久久99精品中文字幕| 国产精品亚洲激情| 亲爱的老师9免费观看全集电视剧| 国产成人精品午夜| 亚洲精品国产品国语在线| 久久激情五月丁香伊人| 国产在线播放不卡| 日本精品免费观看| 日韩中文字幕国产精品| 欧美国产亚洲视频| 欧美亚洲另类制服自拍| 亚洲欧美精品一区| 亚洲视频日韩精品| 欧美成人免费全部观看天天性色| 欧美野外猛男的大粗鳮| 久久91亚洲精品中文字幕| 97国产精品视频| 亚洲国产欧美久久| 国产精品看片资源| 最近的2019中文字幕免费一页| 国产噜噜噜噜噜久久久久久久久| 国产日韩欧美影视| 亚洲欧美另类在线观看| 国产日韩在线免费| 欧美高清在线播放| 懂色av中文一区二区三区天美| 97色在线播放视频| 国产深夜精品福利| 成人在线免费观看视视频| 在线色欧美三级视频| 欧美日韩国产综合视频在线观看中文| www日韩欧美| 欧美高清第一页| 久久久久久综合网天天| 久久精品国产久精国产一老狼| 亚洲国产精品99| 国产精品自产拍在线观看| 欧美色欧美亚洲高清在线视频| 精品女同一区二区三区在线播放| 亚洲美腿欧美激情另类| 91高潮在线观看| 亚洲国产精久久久久久| 日韩精品在线看| 视频直播国产精品| 亚洲精品一区中文| 欧美成人免费大片| 成人激情av在线| 欧美在线观看日本一区| 大伊人狠狠躁夜夜躁av一区| 一区二区国产精品视频| 久久99精品国产99久久6尤物| 国产精品91在线观看| 中文字幕日韩欧美在线| 欧美日韩成人在线观看| 国产美女被下药99| 亚洲天堂2020| 久久久久久久国产| 亚洲天堂网站在线观看视频| 日韩在线视频观看正片免费网站| 亚洲最大激情中文字幕| 亚洲精品成人免费| 成人a视频在线观看| 久久久在线视频| 在线丨暗呦小u女国产精品| 亚洲电影在线看| 日韩欧美高清视频| 欧美精品免费看| 久久综合色影院| 成人免费网站在线看| 亚洲美女又黄又爽在线观看| 国产日韩在线播放| 57pao国产精品一区| 亚洲欧美日韩高清| 欧美性生交xxxxx久久久| 日韩欧美在线视频免费观看| 日韩美女在线看| 精品国内亚洲在观看18黄| 国产精品爱久久久久久久| 91免费看国产| 在线观看日韩视频| 久久精品电影一区二区| 国产精品激情av在线播放| 欧美性xxxx极品高清hd直播| 久久久免费精品视频| 亚洲欧美综合另类中字| 精品毛片三在线观看| 国产成人av网| 日韩欧美成人免费视频| 国产日韩综合一区二区性色av| 成人黄色短视频在线观看| 亚洲免费视频观看| 亚洲国产日韩欧美在线99| 亚洲成人av片在线观看| 国产一区二区久久精品| 日韩中文字幕网址| 日韩美女写真福利在线观看| 欧美激情视频网| 日韩精品高清在线| 精品中文字幕在线| 久久天堂电影网| 亚洲视频电影图片偷拍一区| 亚洲日本成人网| 久久视频免费观看| 清纯唯美日韩制服另类| 成人午夜在线视频一区| 亚洲xxxx在线| 欧美精品videos另类日本| 亚洲女人天堂av| 日韩免费黄色av| 欧美黑人巨大精品一区二区| 国产z一区二区三区| 大荫蒂欧美视频另类xxxx| 国产国产精品人在线视| 人人澡人人澡人人看欧美| 国产精品一区二区三区久久| 九九热这里只有精品6| 久久久亚洲福利精品午夜| 97国产精品久久| 午夜免费在线观看精品视频| 日产精品久久久一区二区福利| 91av在线免费观看视频| 亚洲精品之草原avav久久| 久久99国产精品自在自在app| 国产成人精品久久二区二区91| 亚洲免费视频一区二区| 日韩在线免费观看视频| 中文日韩电影网站| 欧美激情综合色综合啪啪五月| 日本欧美精品在线| 永久555www成人免费| 欧美在线免费看| 日韩av在线看| 精品欧美aⅴ在线网站| 日本19禁啪啪免费观看www| 97在线观看视频国产| 欧美xxxx18性欧美| 国产丝袜一区二区| 国产精品久久久久7777婷婷| 久久6免费高清热精品| 精品性高朝久久久久久久| 欧美一区二区三区四区在线| 日韩av网站电影| 午夜免费在线观看精品视频| 久久在线免费观看视频| 欧美精品免费在线观看| 日韩av在线导航| 成人黄色免费在线观看| 日韩精品黄色网| 欧美高清视频一区二区| 欧美孕妇孕交黑巨大网站| 97在线观看免费| 久久91精品国产91久久跳| 国产欧美久久一区二区| 91国自产精品中文字幕亚洲| 国产综合久久久久久| 精品国模在线视频| 日韩a**站在线观看| 欧美在线视频播放|