項目中遇到要動態創建單選按鈕的情況,把代碼整理如下:
對話框的成員變量:
private: std::list<CButton*> m_radioList; //用來保存動態創建的按鈕的指針,便於釋放
對話框的成員函數:
private: void ClearRadioList(); //釋放動態創建的按鈕
在對話框的OnInitDialog函數裏添加創建按鈕的代碼:
CRect rcBtn(20,0,120,15); //按鈕高度爲15,間隔高度爲10 for (int i = 0; i < 5; i++) { DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON; rcBtn.top += 25; rcBtn.bottom += 25; CButton *pButton = new CButton(); if (0 == i) { dwStyle |= WS_GROUP; //第一個按鈕時添加分組風格 } pButton->Create("單選按鈕", dwStyle, rcBtn, this, 1000 + i); pButton->SetFont(GetFont()); //設置爲父窗口的字體 m_radioList.push_back(pButton); }
添加按鈕的響應:
BOOL CCreateRadioDlg::OnCommand(WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class UINT nID,nMode; nID=LOWORD(wParam); nMode=HIWORD(wParam); if(nMode==BN_CLICKED) { if (nID < (1000 + m_radioList.size()) && nID >= 1000) { CString strTemp; strTemp.Format("%d",nID - 1000); MessageBox(strTemp); } } return CDialog::OnCommand(wParam, lParam); } void CCreateRadioDlg::ClearRadioList() { std::list<CButton*>::const_iterator it; for (it = m_radioList.begin(); it != m_radioList.end(); it++) { delete *it; } m_radioList.clear(); } void CCreateRadioDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here ClearRadioList(); }
因爲C++支持兩種字符串,即常規的ANSI編碼(使用""包裹)和Unicode編碼(使用L""包裹),這樣對應的就有了兩套字符串字符串處理函數,比如:strlen和wcslen,分別用於處理兩種字符串。 微軟將這兩套字符集及其
#pragma once #include <Windows.h> #include <stdio.h> static const char * KEYINFOPREFIX = " Key: \n"; static cons
ARX中非模態對話框的用法 //類似一個全局變量 CNoModalDlg* pDlg = nullptr; //資源切換 CAcModuleResourceOverride myResource; CMDIFrameWnd* p
梁增截面正截面配筋驗算 梁構件基本信息: 加固前截面尺寸 : (1)400mm∗1
停靠時消息映射函數爲 BOOL CMainFrame::OnCloseDockingPane( CDockablePane* pWnd ) { CWnd * pfWnd = pWnd->GetFocus(); if (*
動態創建視圖時候 AfxCheckDialogTemplate執行出錯 在mfc的sdi架構中,準備多做幾個視圖,試圖類繼承自formview,但在動態創建視圖的時候出了錯誤,AfxCheckDialogTemplate執
Visual Studio 2008 中的MFC已經集成了BCG GUI庫的很多功能,可以很容易的建立VS2005或者Office2007風格的界面。 今天寫了一個測試程序,發現默認的CMFCToolBar沒有tooltips。找了一些資
列表指針->PostMessage(WM_VSCROLL, SB_BOTTOM, 0);
今天在網上博客上發現一個很好的優先級記憶方法,鏈接:http://blog.csdn.net/skywalker_leo/article/details/6237222 此貼用來積累關於優先級的計算: (1) int x =
這個函數用於清空矩形區域。 void clearrectangle( int left, int top, int right, int bottom ); 參數 left 矩形左部 x 座標。 top 矩形頂部 y 座標。
當多個線程訪問一個獨佔性共享資源時,可以使用“臨界區”對象。任一時刻只有一個線程可以擁有臨界區對象,擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他希望進入臨界區的線程將被掛起等待,直到擁有臨界區的線程放棄臨界區時爲止,這樣就保證了
想做一個柵條特效的窗口,在網上找到一篇VC窗口特效的文章,原文:http://blog.csdn.net/qiaozhangchi/archive/2008/12/11/3497367.aspx,發現並沒有柵條特效,在網上找了很久
在codeproject上看到了個有滾動條的對話框DEMO,原文http://www.codeproject.com/KB/dialog/scroll_dialog.aspx,不過是用SDK寫的,爲了在MFC下使用方便,把它改寫成了類CS
互斥對象(mutex)能夠確保線程擁有對單個資源的互斥訪問權。實際上互斥對象是因此而得名的。互斥對象包含一個使用數量,一個線程I D和一個遞歸計數器。互斥對象的行爲特性與臨界區相同,但是互斥對象屬於內核對象,而臨界區則屬於用戶方式對象。這
vc++ 中ADO數據庫的配置(Access2003-Access2007) 1. 首先在StdAfx.h中添加以下代碼引入數據庫: #import "C:\\Program Files\\Common Files\\Sys