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...