申明:請用這個的同學修改變數名函式名和刪除注釋,否則後果自負..........視覺化程式設計老師布置的題目:獲取驅動器名和圖示,插入到列表檢視,而且可以隨意切換檢視風格。用執行緒讓乙個進度條走動,並可以隨時終止這個執行緒,最終效果如下:
實現過程:首先建立乙個以學號命名的工程,選擇單對話方塊模式,新增1個列表檢視控制項,1個進度條控制項,1個下拉框控制項,2個按鈕。下拉框風格設定為下拉列表,資料**新增上圖4項。命名控制項(見圖)
往對話方塊類裡面 新增2個公有成員變數 1個公有函式 1個保護成員變數
public:
cimagelist bimage;//大圖示
cimagelist image;//小圖示
void getpen();//獲取系統磁碟資訊
protected:
cwinthread* pthread;//執行緒指標
在類之外新增乙個全域性函式
uint threadfunc(lpvoid lpparam);//執行緒執行函式
該函式實現**:
////執行緒執行函式 傳入要操作進度條
// uint threadfunc(lpvoid lpparam)
return 0;}
執行緒這個功能已經實現一部分,我們跳過先去實現驅動器部分。在對話方塊類的oninitdialog()中加入:
m_ctrlprogress.setrange(0,100);//定義進度條長度
//初始化列表檢視
m_listmain.setextendedstyle(lvs_ex_fullrowselect|lvs_ex_oneclickactivate|lvs_ex_infotip);
m_listmain.insertcolumn(0,"名稱",lvcfmt_left,80);
//建立大小圖示
image.create(16,16,ilc_color32,10,10);
bimage.create(32,32,ilc_color32,10,10);
//將圖示與列表檢視繫結
m_listmain.setimagelist(&image,lvsil_small);
m_listmain.setimagelist(&bimage,lvsil_normal);
//獲取驅動器資訊
getpen();
//設定下拉列表為圖示
m_cmbview.setcursel(0);
為下拉框新增事件onselendok 並寫入:
long lstyle;
lstyle=getwindowlong(m_listmain.m_hwnd,gwl_style);//獲取當前視窗型別
lstyle&=~lvs_typemask; //清除顯示方式位
int i=m_cmbview.getcursel();//獲取選擇的顯示方式
switch (i)
setwindowlong(m_listmain.m_hwnd,gwl_style,lstyle);//設定視窗型別
實現getpen函式:
cstring str;
char drivers[120];//用於儲存所有驅動器名稱
char* pdriver=null;//定義指標去讀取單個驅動器名稱
getlogicaldrivestrings(120,drivers);//獲取所有驅動器名稱
hicon bhicon;//大圖示
hicon shicon;//小圖示
//extracticonex函式從指定dll中提取圖示
//第乙個引數為要操作的dll
//第二個引數為要獲取圖示的序號
//第三個引數為該圖示要儲存到那個圖示上(大圖示)
//第四個引數為該圖示要儲存到那個圖示上(小圖示)
// 8 硬碟驅動器圖示
extracticonex("shell32.dll",8,&bhicon,&shicon,1);
image.add(shicon); //新增小圖示到影象列表
bimage.add(bhicon); //新增大圖示到影象列表
// 7 可移動的驅動器圖示
extracticonex("shell32.dll",7,&bhicon,&shicon,1);
image.add(shicon);
bimage.add(bhicon);
// 9 網路驅動器圖示
extracticonex("shell32.dll",11,&bhicon,&shicon,1);
image.add(shicon);
bimage.add(bhicon);
// 11 cd-rom驅動器圖示
extracticonex("shell32.dll",9,&bhicon,&shicon,1);
image.add(shicon);
bimage.add(bhicon);
pdriver=drivers;//指向驅動器名稱頭
dword type=0;//驅動器型別
int i=0;//列表檢視序號
int index=0;//影象列表序號 0為硬碟驅動器
while (strcmp(pdriver,""))
str.format(pdriver);//把char轉換為cstring
str.remove('//');//移除中的後面的斜槓
m_listmain.insertitem(i,str,index);//插入到列表檢視 index為圖示序號
pdriver+=strlen(pdriver)+1; //下乙個驅動器
i++;//下一項 }
好了,驅動器已經讀取成功,開始寫執行緒功能。乙個按鈕是開啟執行緒,乙個是終止執行緒。
開始按鈕事件:
//開啟乙個執行緒
//第乙個引數為要執行的函式名
//第二個引數為要操作的進度條(這個也是函式threadfunc的引數lpvoid lpparam)
//afxbeginthread返回乙個 cwinthread*
//所以一開始定義乙個成員變數去記錄這個執行緒
//方便後面對該執行緒執行終止命令
pthread=afxbeginthread(threadfunc,&m_ctrlprogress);
終止按鈕事件:
//terminatethread終止執行緒
//pthread->m_hthread為要操作的執行緒的控制代碼
terminatethread(pthread->m_hthread,0);
視覺化程式設計小作業之小小改進
上次那個只獲取了驅動器名稱而沒有獲取相關資訊,這次針對這些做了小小調整。最終效果見下圖 先修改oninitdialog函式,往列表檢視新增3列 初始化列表檢視 m listmain.setextendedstyle lvs ex fullrowselect lvs ex oneclickactiva...
視覺化程式設計storyBoard
1.針對空模板,先把自動建立的window刪除 2.建立乙個storyboard 3.在general中將maininte ce選為建立的storyboard 4.新建立的storyboard裡什麼也沒有,拖拽乙個viewcontroller上去 5.選中viewcontroller,在工具欄選擇第...
視覺化程式設計原理
視覺化程式設計原理 物件 安裝的程式 事件 滑鼠雙擊 單擊 右鍵 回車等快捷鍵的觸發 事件 我們對不同的物件實施相同的事件,結果可能不相同。為什麼?右鍵事件觸發的方法 不一樣。視覺化程式設計介面設計 ui 窗體 控制項 窗體是來存放控制項的容器 例子事件 click mouseclick load ...