MFC學習中遇到的問題集合

2021-07-31 10:23:05 字數 4767 閱讀 5179

q1:限制視窗大小

a1:類嚮導-》訊息-》過載wm_getminmaxinfo-》填入**

lpmmi->ptmintracksize.x =

500; // 設定最小跟蹤寬度

lpmmi->ptmintracksize.y =

400; // 設定最小跟蹤高度

lpmmi->ptmaxtracksize.x =

500; // 設定最大跟蹤寬度

lpmmi->ptmaxtracksize.y =

400; // 設定最大跟蹤高度

q2:mfc控制項顯示

a2:

//動態載入

int cx, cy;

cimage image;

crect rect;

//根據路徑載入

image.load(l"main.bmp");

//獲取的寬 高度

cx = image.getwidth();

cy = image.getheight();

//獲取picture control控制項的大小

getdlgitem(idc_static1)->getwindowrect(&rect);

//將客戶區選中到控制項表示的矩形區域內

screentoclient(&rect);

//視窗移動到控制項表示的區域

getdlgitem(idc_static1)->movewindow(rect.left, rect.top, cx, cy, true);

cwnd *pwnd =

null;

pwnd = getdlgitem(idc_static1);//獲取控制項控制代碼

pwnd->getclientrect(&rect);//獲取控制代碼指向控制項區域的大小

cdc *pdc =

null;

pdc = pwnd->getdc();//獲取picture的dc

image.draw(pdc->m_hdc, rect);//將繪製到picture表示的區域內

releasedc(pdc);

//靜態載入

/首先新增資源-》bitmap-》匯入-》選擇-》資源檢視-》記錄rc中bitmap的id-》新增picture control控制項並設定id-》在onpaint()函式裡面新增下面**/

//從資源中載入  

cbitmap bitmap;

//載入指定位圖資源 bmpid

bitmap.loadbitmap(idb_bitmap1);

//獲取對話方塊上的控制代碼 控制項id

cstatic *p = (cstatic *)getdlgitem(idc_static1);

//設定靜態控制項視窗風格為位圖居中顯示

p->modifystyle(0xf, ss_bitmap | ss_centerimage);

//將設定到picture控制項上

p->setbitmap(bitmap);

q3:mfc程式記憶體洩漏檢測方法(debug):

#ifdef _debug

protected:

cmemorystate m_msold, m_msnew, m_msdiff;

#endif // _debug

#ifdef _debug

m_msold.checkpoint();

#endif // _debug

#ifdef _debug

m_msnew.checkpoint();

if (m_msdiff.difference(m_msold, m_msnew))

#endif // _debug

q4:mfc檢視記憶體洩露

a4:debug版本程式執行結束後如有記憶體洩漏,輸出視窗中會顯示類似資訊:

memory leaked :

0 bytes in 0 free blocks.

8 bytes in 1 normal blocks.

0 bytes in 0 crt blocks.

0 bytes in 0 ignore blocks.

0 bytes in 0 client blocks.

largest number used: 8825 bytes.

total allocations: 47506 bytes.

dump complete !

detected memory leaks!

dumping objects ->

g:\programs\chat\chatdlg.cpp(120) : normal block at 0x00d98150, 8 bytes long.

data: < > a8 7f d9 00 01 00 00 00(這裡表示有洩露)

object dump complete.

q5:updatedata

a5:

updatedata(true);//用於將螢幕上控制項中的資料交換到變數中。

updatedata(false);//用於將資料在螢幕中對應控制項中顯示出來。

q6:run-time check failure #2 - stack around the variable 」 was corrupte

a6:一般情況是越界(如陣列)

q7:list control

a7:新增變數名m_list;

設定列表頭:

m_list.insertcolumn(0,"使用者名稱:",lvcfmt_left,147);

m_list.insertcolumn(1, "密碼:", lvcfmt_left, 147);

/*其引數依次表示:列號,列標題, 對齊方式,列寬*/

新增值:

m_list.insertitem(0, num);

m_list.setitemtext(0,1, pass);

設定風格:

m_list.setextendedstyle(lvs_ex_gridlines|lvs_ex_fullrowselect|lvs_ex_checkboxes);
/*lvs_ex_fullrowselect 選中某行使整行高亮(只適用與report風格的listctrl)

lvs_ex_gridlines 網格線(只適用與report風格的listctrl)

lvs_ex_checkboxes item前生成checkbox控制項*/

刪除i項:

int nitemcount=m_list.getitemcount();/*獲取項數*/

m_list.deleteitem(i);/*刪除i項*/

刪除全部:m_list.deleteallitems();

新增右鍵響應:滑鼠右鍵-》新增事件處理程式-》訊息型別按下面需求選、類列表選好

/*lvn_columnclick在單擊列表的標題欄才響應;

nm_click是在單擊乙個的列表項才響應。

hdn_itemclick是標題欄的單擊事件。

nm_dblclk是在右鍵雙擊乙個的列表項才響應。*/

獲取右鍵選中項內容:在上面新增的函式裡面新增下面**:

cstring strtext;

position pos = m_mpfriends_friendslist.getfirstselecteditemposition();

if (pos != null)

插入一行多列只顯示第一列原因:setitemtext()之前沒有進行insertitem()(這個最好在oninitdialog()裡面)

q8:顯示視窗

a8:

非模態對話方塊顯示視窗(優勢:還可以操作原視窗):

cmpchat *chatpanel;

chatpanel =

new cmpchat;

chatpanel->create(idd_mp_chat, this);/*引數說明:第乙個引數為資源檢視中dialog的cmpchat的id*/

chatpanel->showwindow(sw_show);/*記住要delete*/

模態對話方塊:

cmpchat chatpanel;

chatpanel.domodal();

q9:mfc程式開發時,經常會出現沒有最大和最小化按鈕的問題

a9:在視窗檔案右擊-屬性-system menu,設定為true。

q10:cstring漢字怎麼存到char*

a10:

widechartomultibyte(cp_acp, 0, m_chatedit/*cstring*/, -1, lg.ndata/*char陣列*/, t/*cstring.getlength()*/*2 + 1, null, null);
q11:edit control控制項中『\n』換行符無效

a11:請嘗試 『\r\n』

q12:csocket伺服器接收檔案時鎖住了ui,程式正常執行

a12:可能前面出現了enablewindow(false);需要在結束的地方新增enablewindow(true);

學習中遇到的問題

頂層const和底層const的概念與區別。vector的sort演算法究竟有沒有使用std swap或者自定義型別自己的swap?類中static成員在 初始化?函式的預設引數是引用,用右值初始化時,為什麼必須是const型別?void resize size t n,std string s s...

C 學習中遇到的問題

在c 學習中遇到的問題集中在此,若有高人看見希望給出解決辦法,在日後的學習中本人若找到解決辦法,也在此更新!1 如何實現ipconfig all命令的全部功能 region 另類解法 程式如下 system.diagnostics.process p new system.diagnostics.p...

JS學習中遇到的問題

1.js給input text文字框 第一種賦值不能及時在文字框展示出來,但是f12除錯可以看到,value已經賦值。第二種沒問題。現在不知道什麼原因。這樣不行 var html n n n 正在為您自動跳轉,也可以手動返回 n n 5秒後自動跳轉.n 返回 n n n n n dialog buy...