用命令列方式編譯乙個BCB工程檔案bpr

2021-04-14 15:04:18 字數 3675 閱讀 2531

clistctrl基本使用

列表控制項可以看作是功能增強的listbox,它提供了四種風格,而且可以同時顯示一列的多中屬性值。mfc中使用clistctrl類來封裝列表控制項的各種操作。通過呼叫bool create( dword dwstyle, const rect& rect, cwnd* pparentwnd, uint nid );建立乙個視窗,dwstyle中可以使用以下一些列表控制項的專用風格:

lvs_icon lvs_**allicon lvs_list lvs_report 這四種風格決定控制項的外觀,同時只可以選擇其中一種,分別對應:大圖示顯示,小圖示顯示,列表顯示,詳細報表顯示

lvs_editlabels 結點的顯示字元可以被編輯,對於報表風格來講可編輯的只為第一列。

lvs_showselalways 在失去焦點時也顯示當前選中的結點

lvs_singlesel 同時只能選中列表中一項

首先你需要設定列表控制項所使用的imagelist,如果你使用大圖示顯示風格,你就需要以如下形式呼叫:

cimagelist* setimagelist( cimagelist* pimagelist, lvsil_normal);

如果使用其它三種風格顯示而不想顯示圖示你可以不進行任何設定,否則需要以如下形式呼叫:

cimagelist* setimagelist( cimagelist* pimagelist, lvsil_**all);

通過呼叫int insertitem( int nitem, lpctstr lpszitem );可以在列表控制項中nitem指明位置插入一項,lpszitem為顯示字元。除lvs_report風格外其他三種風格都只需要直接呼叫insertitem就可以了,但如果使用報表風格就必須先設定列表控制項中的列資訊。

通過呼叫int insertcolumn( int ncol, lpctstr lpszcolumnheading, int nformat , int nwidth, int nsubitem);可以插入列。icol為列的位置,從零開始,lpszcolumnheading為顯示的列名,nformat為顯示對齊方式,nwidth為顯示寬度,nsubitem為分配給該列的列索引。

在有多列的列表控制項中就需要為每一項指明其在每一列中的顯示字元,通過呼叫bool setitemtext( int nitem, int nsubitem, lptstr lpsztext );可以設定每列的顯示字元。nitem為設定的項的位置,nsubitem為列位置,lpsztext為顯示字元。下面的**演示了如何設定多列並插入資料:

m_list.setimagelist(&m_list**all,lvsil_**all);//設定imagelist

m_list.insertcolumn(0,"col 1",lvcfmt_left,300,0);//設定列

m_list.insertcolumn(1,"col 2",lvcfmt_left,300,1);

m_list.insertcolumn(2,"col 3",lvcfmt_left,300,2);

m_list.insertitem(0,"item 1_1");//插入行

m_list.setitemtext(0,1,"item 1_2");//設定該行的不同列的顯示字元

m_list.setitemtext(0,2,"item 1_3");

此外clistctrl還提供了一些函式用於得到/修改控制項的狀態。

colorref gettextcolor( )/bool settextcolor( colorref cr );用於得到/設定顯示的字元顏色。

colorref gettextbkcolor( )/bool settextbkcolor( colorref cr );用於得到/設定顯示的背景顏色。

void setitemcount( int icount );用於得到新增進列表中項的數量。

bool deleteitem(int nitem);用於刪除某一項,bool deleteallitems( );將刪除所有項。

bool setbkimage(hbitmap hbm, bool ftile , int xoffsetpercent, int yoffsetpercent);用於設定背景位圖。

cstring getitemtext( int nitem, int nsubitem );用於得到某項的顯示字元。

列表控制項的訊息對映同樣使用on_notify巨集,形式如同:on_notify( wnotifycode, id, memberfxn ),wnotifycode為通知**,id為產生該訊息的視窗id,memberfxn為處理函式,函式的原型如同void on***list(nmhdr* pnmhdr, lresult* presult),其中pnmhdr為一資料結構,在具體使用時需要轉換成其他型別的結構。對於列表控制項可能取值和對應的資料結構為:

lvn_beginlabeledit 在開始某項編輯字元時傳送,所用結構:nmlvdispinfo

lvn_endlabeledit 在結束某項編輯字元時傳送,所用結構:nmlvdispinfo

lvn_getdispinfo 在需要得到某項資訊時傳送,(如得到某項的顯示字元)所用結構:nmlvdispinfo

關於on_notify有很多內容,將在以後的內容中進行詳細講解。

關於動態提供結點所顯示的字元:首先你在項時需要指明lpszitem引數為:lpstr_textcallback。在控制項顯示該結點時會通過傳送tvn_getdispinfo來取得所需要的字元,在處理該訊息時先將引數pnmhdr轉換為lpnmlvdispinfo,然後填充其中item.psztext。通過item中的iitem,isubitem可以知道當前顯示的為那一項。下面的**演示了這種方法:

char szout[8][3]=;

//新增結點

m_list.insertitem(lpstr_textcallback,...)

m_list.insertitem(lpstr_textcallback,...)

//處理訊息

void cparentwnd::ongetdispinfolist(nmhdr* pnmhdr, lresult* presult)

關於編輯某項的顯示字元:(在報表風格中只對第一列有效)首先需要設定列表控制項的lvs_editlabels風格,在開始編輯時該控制項將會傳送lvn_beginlabeledit,你可以通過在處理函式中返回true來取消接下來的編輯,在編輯完成後會傳送lvn_endlabeledit,在處理該訊息時需要將引數pnmhdr轉換為lpnmlvdispinfo,然後通過其中的item.psztext得到編輯後的字元,並重置顯示字元。如果編輯在中途中取消該變數為null。下面的**說明如何處理這些訊息:

//處理訊息 lvn_beginlabeledit void cparentwnd::onbegineditlist(nmhdr* pnmhdr, lresult* presult)

//處理訊息 lvn_beginlabeledit

void cparentwnd::onbegineditlist(nmhdr* pnmhdr, lresult* presult)

上面講述的方法所進行的訊息對映必須在父視窗中進行(同樣wm_notify的所有訊息都需要在父視窗中處理)。

如何得到當前選中項位置:在列表控制項中沒有乙個類似於listbox中getcursel()的函式,但是可以通過呼叫getnextitem( -1, lvni_all | lvni_selected);得到選中項位置。 

使用命令列方式編譯wxWidgets

d wxwidgets 2.8.8 build msw找到 config.vc,並以記事本方式開啟,進行一些修改 unicode 0改為1 使用unicode monolithic 0改為1 把所有的庫都編在乙個檔案中。use opengl 1 自帶opengl支援 use odbc 1 自帶odb...

VS開發用命令列自動編譯工程

最近在研究工程的自動化配置和編譯部署,找到一篇描述vc命令列編譯的帖子,經試驗在vs2008 下也是ok的,這樣結合svn可以用指令碼做一系列自動化操作,特轉錄如下 ps 補充,試用了一段時間,配置好了工程,自動化build是沒問題,現在有個問題是即使工程中有檔案被更新了,這個命令貌似無法檢測到檔案...

使用命令列編譯vc6 0工程

cmd開啟方式 1 win r 輸入cmd 2 附件 命令列提示符 1 輸入 d 進入d盤 2 輸入 cd 進入指定的工程資料夾 常用的cmd檔案操作命令 1 輸入碟符 如c 然後回車,相當於進了c盤 c盤一般進的是桌面目錄 2 輸入 cd 目錄名 然後回車。如 cd sougou sogouinp...