錛?錛?濡備綍鏀瑰彉紿楀彛鐨勫浘鏍?
鍚戠獥鍙e彂閫?WM_SECTION娑堟伅銆?br />Example:
HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON)
ASSERT(hIcon)
AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM)hIcon)
Call Function CWnd::CenterWindows()
Example(1):
Center Window( ) //Relative to it's parent
// Relative to Screen
Example(2):
CenterWindow(CWnd:: GetDesktopWindow( ))
//Relative to Application's MainWindow
AfxGetMainWnd( ) ->CenterWindow( )
聽
錛?2錛?濡備綍鍒涘緩涓涓瓧鍥炵粫鐨凜EditView
閲嶈澆CWnd : : PreCreateWindow鍜屼慨鏀笴REATESTRUCT緇撴瀯錛屽叧闂瑿EditView瀵硅薄鐨凟S_AUTOHSCROLL鍜學(xué)S_HSCROLL椋庢牸浣嶏紝 鐢變簬CEditView : : PreCreateWindow鏄劇ず璁劇疆cs. style錛岃皟鐢ㄥ熀綾誨嚱鏁板悗瑕佷慨鏀筩s . style銆?br />
BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&cs)
{
//First call basse class function .
BOOL bResutl =CEditView : : PreCreateWindow (cs)
// Now specify the new window style .
cs.style &= ~ (ES_AUTOHSCROLL 锝淲S_HSCROLL)
return bResult
}
錛?7錛?濡備綍鍗曞嚮闄や簡(jiǎn)紿楀彛鏍囬鏍忎互澶栫殑鍖哄煙浣跨獥鍙gЩ鍔?br />褰撶獥鍙i渶瑕佺‘瀹氶紶鏍囦綅緗椂Windows鍚戠獥鍙e彂閫乄M_NCHITTEST淇℃伅錛屽彲浠ュ鐞嗚淇℃伅浣縒indows璁や負(fù)榧犳爣鍦ㄧ獥鍙f爣棰樹笂銆傚浜庡璇濇鍜屽熀浜庡璇濈殑搴旂敤紼嬪簭錛屽彲浠ヤ嬌鐢–lassWizard澶勭悊璇ヤ俊鎭茍璋冪敤鍩虹被鍑芥暟錛?濡傛灉鍑芥暟榪斿洖HTCLIENT 鍒欒〃鏄庨紶鏍囧湪瀹㈡埧鍖哄煙錛岃繑鍥濰TCAPTION琛ㄦ槑榧犳爣鍦╓indows鐨勬爣棰樻爮涓?br />UINT CSampleDialog : : OnNcHitTest (Cpoint point )
{
UINT nHitTest =Cdialog: : OnNcHitTest (point )
return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest
}
涓婅堪鎶鏈湁涓ょ偣涓嶅埄涔嬪錛?br />鍏朵竴鏄湪紿楀彛鐨勫鎴峰尯鍩熷弻鍑?yán)L椂錛岀獥鍙e皢鏋佸ぇ錛?br />鍏朵簩錛?瀹冧笉閫傚悎鍖呭惈鍑犱釜瑙嗙獥鐨勪富妗嗙獥鍙c?br />榪樻湁涓縐嶆柟娉曪紝褰撶敤鎴鋒寜涓嬮紶鏍囧乏閿嬌涓繪紿楀彛璁や負(fù)榧犳爣鍦ㄥ叾紿楀彛鏍囬涓婏紝浣跨敤ClassWizard鍦ㄨ紿椾腑澶勭悊WM_LBUTTODOWN淇℃伅騫跺悜涓繪紿楀彛鍙戦佷竴涓猈M_NCLBUTTONDOWN淇℃伅鍜屼竴涓崟鍑?yán)L祴璇旽TCAPTION銆?br />void CSampleView : : OnLButtonDown (UINT nFlags , Cpoint point
)
{
CView : : OnLButtonDow (nFlags , pont )
//Fool frame window into thinking somene clicked
on
its caption bar .
GetParentFrame ( ) 鈥?gt; PostMessage (
WM_NCLBUTTONDOWN ,
HTCAPTION , MAKELPARAM (poitn .x , point .y) )
}
璇ユ妧鏈篃閫傜敤浜庡璇濇鍜屽熀浜庡鐨勫簲鐢ㄧ▼搴忥紝鍙槸涓嶅繀璋冪敤
CWnd: :GetParentFrame 銆?br />void CSampleDialog : : OnLbuttonDown (UINT nFlags, Cpoint point )
{
Cdialog : : OnLButtonDow (nFlags, goint )
//Fool dialog into thinking simeone clicked on its
caption bar .
PostMessage (WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARM (point.x
, point. y
) )
}
錛?8錛?濡備綍鏀瑰彉瑙嗙獥鐨勮儗鏅鑹?br />Windows鍚戠獥鍙e彂閫佷竴涓猈M_ERASEBKGND娑堟伅閫氱煡璇ョ獥鍙f摝闄よ儗鏅紝鍙互浣跨敤ClassWizard閲嶈澆璇ユ秷鎭殑緙虹渷澶勭悊紼嬪簭鏉ユ摝闄よ儗鏅紙瀹為檯鏄敾錛夛紝騫惰繑鍥濼RUE浠ラ槻姝indows鎿﹂櫎紿楀彛銆?br />//Paint area that needs to be erased.
BOOL CSampleView : : OnEraseBkgnd (CDC* pDC)
{
// Create a pruple brush.
CBrush Brush (RGB (128 , 0 , 128) )
// Select the brush into the device context .
CBrush* pOldBrush = pDC鈥?gt;SelcetObject (&brush)
// Get the area that needs to be erased .
CRect reClip
pDC鈥?gt;GetCilpBox (&rcClip)
//Paint the area.
pDC鈥?gt; PatBlt (rcClip.left , rcClip.top , rcClip.Width ( ) , rcClip.Height( ) , PATCOPY )
//Unselect brush out of device context .
pDC鈥?gt;SelectObject (pOldBrush )
// Return nonzero to half fruther processing .
return TRUE
}
錛?0錛?濡備綍闃叉涓繪紿楀彛鍦ㄥ叾璇存槑涓樉紺烘椿鍔ㄧ殑鏂囨。鍚?br />鍒涘緩涓繪紿楀彛鍜孧DI瀛愮獥鍙h繘閫氬父鍏鋒湁FWS_ADDTOTITLE椋庢牸浣嶏紝濡傛灉涓嶅笇鏈涘湪璇存槑涓嚜鍔ㄦ坊鍔犳枃妗e悕錛?蹇呴』紱佹璇ラ鏍間綅錛?鍙互浣跨敤ClassWizard閲嶇疆
CWnd: : PreCreateWindow騫跺叧闂璅WS_ADDTOTITLE椋庢牸銆?br />BOOL CMainFrame : : PreCreateWindow (CREATESTRUCT&cs)
{
//Turn off FWS_ADDTOTITLE in main frame .
cs.styel & = ~FWS_ADDTOTITLE 銆
return CMDIFrameWnd : : PreCreateWindow (cs )
}
鍏抽棴MDI瀛愮獥鍙g殑FWS _ADDTOTITLE椋庢牸灝嗗垱寤轟竴涓叿鏈夌┖鏍囬鐨勭獥鍙o紝鍙互璋冪敤CWnd: : SetWindowText鏉ヨ緗爣棰樸傝浣忚嚜宸辮緗爣棰樻椂瑕侀伒寰帴鍙i鏍兼寚鍗椼?/p>
錛?1錛?濡備綍鑾峰彇鏈夊叧紿楀彛姝e湪澶勭悊鐨勫綋鍓嶆秷鎭殑淇℃伅
璋冪敤CWnd: : GetCurrentMessage鍙互鑾峰彇涓涓狹SG鎸囬拡銆備緥濡傦紝鍙互浣跨敤ClassWizard灝嗗嚑涓彍鍗曢」澶勭悊紼嬪簭鏄犲皠鍒頒竴涓嚱鏁頒腑錛岀劧鍚庤皟鐢℅etCurrentMessage鏉ョ‘瀹氭墍閫変腑鐨勮彍鍗曢」銆?br />viod CMainFrame : : OnCommmonMenuHandler ( )
{
//Display selected menu item in debug window .
TRACE ("Menu item %u was selected . \n" ,
錛?2錛?濡備綍鍦ㄤ唬鐮佷腑鑾峰彇宸ュ叿鏉″拰鐘舵佹潯鐨勬寚閽?br />緙虹渷鏃訛紝 宸ヤ綔妗嗗垱寤虹姸鎬佹潯鍜屽伐鍏鋒潯鏃跺皢瀹冧滑浣滀負(fù)涓繪紿楀彛鐨勫瓙紿楀彛錛岀姸鎬佹潯鏈変竴涓狝FX_IDW_STATUS_BAR鏍囪瘑絎︼紝宸ュ叿鏉℃湁涓涓狝FX_IDW_TOOLBAR鏍囪瘑絎︼紝涓嬩緥璇存槑浜?jiǎn)濡備綍閫氳繃涓璧瘋皟鐢–Wnd: : GetDescendantWindow鍜孉fxGetMainWnd鏉ヨ幏鍙栬繖浜涘瓙紿楀彛鐨勬寚閽堬細(xì)
//Get pointer to status bar .
CStatusBar * pStatusBar = (CStatusBar *) AfxGetMainWnd ( )
鈥?gt; GetDescendantWindow(AFX_IDW_STUTUS_BAR)
//Get pointer to toolbar .
CToolBar * pToolBar = (CToolBar * ) AfxGetMainWnd ( )
鈥?gt; GetDescendantWindow(AFX_IDW_TOOLBAR)
錛?3錛?濡備綍浣胯兘鍜岀姝㈠伐鍏鋒潯鐨勫伐鍏鋒彁紺?br />濡傛灉璁劇疆浜?jiǎn)CBRS_TOOLTIPS椋庢牸浣嶏紝宸ュ叿鏉″皢鏄劇ず宸ュ叿鎻愮ず錛岃浣胯兘鎴栬呯姝㈠伐鍏鋒彁紺猴紝闇瑕佽緗垨鑰呮竻闄よ椋庢牸浣嶃備笅渚嬮氳繃璋冪敤CControlBar : : GetBarStyle鍜孋ControlBar : : SetBarStyle寤虹珛涓涓畬鎴愭鍔熻兘鐨勬垚鍛樺嚱鏁幫細(xì)
void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )
{
ASSERT_VALID (m_wndToolBar)
DWORD dwStyle = m _wndToolBar.GetBarStyle ( )
if (bDisplayTips) dwStyle 锝?CBRS_TOOLTIPS
else
dwStyle & = ~CBRS_TOOLTIPS
m_wndToolBar.SetBarStyle (dwStyle )
}
錛?4錛?濡備綍鍒涘緩涓涓笉瑙勫垯褰㈢姸鐨勭獥鍙?br />鍙互浣跨敤鏂扮殑SDK鍑芥暟SetWindowRgn銆傝鍑芥暟灝嗙粯鐢誨拰榧犳爣娑堟伅闄愬畾鍦ㄧ獥鍙g殑涓涓寚瀹氱殑鍖哄煙錛屽疄闄呬笂浣跨獥鍙f垚涓烘寚瀹氱殑涓嶈鍒欏艦鐘躲?浣跨敤AppWizard鍒涘緩涓涓熀浜庡鐨勫簲鐢ㄧ▼搴忓茍浣跨敤璧勬簮緙栬緫鍣ㄤ粠涓誨璇濊祫婧愪腑鍒犻櫎鎵鍦ㄧ殑緙虹渷鎺т歡銆佹爣棰樹互鍙?qiáng)杈圭晫銆?br />緇欏璇濈被澧炲姞涓涓狢Rgn鏁版嵁鎴愬憳錛屼互鍚庤浣跨敤璇ユ暟鎹垚鍛樺緩绔嬬獥鍙e尯鍩熴?br />Class CRoundDlg : public CDialog
{
鈥?br />private :
Crgn m_rgn : // window region
鈥?br />}
淇敼OnInitDialog鍑芥暟寤虹珛涓涓き鍦嗗尯鍩熷茍璋冪敤SetWindowRgn灝嗚鍖哄煙鍒嗛厤緇欑獥鍙o細(xì)
BOOL CRoundDlg : : OnInitDialog ( )
{
CDialog : : OnInitDialog ( )
//Get size of dialog .
CRect rcDialog
GetClientRect (rcDialog )
// Create region and assign to window .
m_rgn . CreateEllipticRgn (0 , 0 , rcDialog.Width( ) , rcDialog.Height ( ) )
SetWindowRgn (GetSafeHwnd ( ) , (HRGN) m_ rgn ,TRUE )
return TRUE
}
閫氳繃寤虹珛鍖哄煙鍜岃皟鐢⊿etWindowRgn錛屽凡緇忓緩绔嬩竴涓笉瑙勫垯褰㈢姸鐨勭獥鍙o紝涓嬮潰鐨勪緥瀛愮▼搴忔槸淇敼OnPaint鍑芥暟浣跨獥鍙e艦鐘剁湅璧鋒潵璞′竴涓悆褰綋銆?br />voik CRoundDlg : : OnPaint ( )
{
CPaintDC de (this) // device context for painting
.
//draw ellipse with out any border
dc. SelecStockObject (NULL_PEN)
//get the RGB colour components of the sphere color
COLORREF color= RGB( 0 , 0 , 255)
BYTE byRed =GetRValue (color)
BYTE byGreen = GetGValue (color)
BYTE byBlue = GetBValue (color)
// get the size of the view window
Crect rect
GetClientRect (rect)
// get minimun number of units
int nUnits =min (rect.right , rect.bottom )
//calculate he horiaontal and vertical step size
float fltStepHorz = (float) rect.right /nUnits
float fltStepVert = (float) rect.bottom /nUnits
int nEllipse = nUnits/3 // calculate how many to
draw
int nIndex
// current ellipse that is being draw
CBrush brush
// bursh used for ellipse fill color
CBrush *pBrushOld // previous
brush that was selected into dc
//draw ellipse , gradually moving towards upper-right
corner
for (nIndex = 0 nIndes < + nEllipse nIndes++)
{
//creat solid brush
brush . CreatSolidBrush (RGB ( ( (nIndex*byRed ) /nEllipse ).
( ( nIndex * byGreen ) /nEllipse ), ( (nIndex * byBlue)
/nEllipse ) ) )
//select brush into dc
pBrushOld= dc .SelectObject (&brhsh)
//draw ellipse
dc .Ellipse ( (int) fltStepHorz * 2, (int) fltStepVert * nIndex ,
rect. right -( (int) fltStepHorz * nIndex )+ 1,
rect . bottom -( (int) fltStepVert * (nIndex *2) ) +1)
//delete the brush
brush.DelecteObject ( )
}
}
鏈鍚庯紝澶勭悊WM_NCHITTEST娑堟伅錛屼嬌褰撳嚮鎵撶獥鍙g殑浠諱綍浣嶇疆鏃惰兘縐誨姩紿楀彛銆?br />UINT CRoundDlg : : OnNchitTest (Cpoint point )
{
//Let user move window by clickign anywhere on thewindow .
UINT nHitTest = CDialog : : OnNcHitTest (point)
rerurn (nHitTest = = HTCLIENT)? HTCAPTION: nHitTest
}
錛?7錛?濡備綍鍒涘緩鍜屼嬌鐢ㄦ棤妯″紡瀵硅瘽妗?br />MFC灝嗘ā寮忓拰鏃犳ā寮忓璇濆皝瑁呭湪鍚屼竴涓被涓紝浣嗘槸浣跨敤鏃犳ā寮忓璇濋渶瑕佸嚑涓璇濋渶瑕佸嚑涓澶勭殑姝ラ銆傞鍏堬紝浣跨敤璧勬簮緙栬緫鍣ㄥ緩绔嬪璇濊祫婧愬茍浣跨敤ClassWizard鍒涘緩涓涓狢Dialog鐨勬淳鐢熺被銆傛ā寮忓拰鏃犳ā寮忓璇濈殑涓鏄笉涓鏍風(fēng)殑錛氭ā寮忓璇濋氳繃璋冪敤CDialog : : EndDialog 鏉ヤ腑姝紝鏃犳ā寮忓璇濆垯鏄皟鐢–Wnd: : DestroyWindow鏉ヤ腑姝㈢殑錛屽嚱鏁癈Dialog : : OnOK鍜孋Dialog : : OnCancel璋冪敤EndDialog ,鎵浠ラ渶瑕佽皟鐢―estroyWindow騫墮噸緗棤妯″紡瀵硅瘽鐨勫嚱鏁般?br />void CSampleDialog : : OnOK ( )
{
// Retrieve and validate dialog data .
if (! UpdateData (TRUE) )
{
// the UpdateData rountine
will set focus to correct item TRACEO (" UpdateData failed during dialog termination .\n")
return
}
//Call DestroyWindow instead of EndDialog .
DestroyWindow ( )
}
void CSampleDialog : : OnCancel ( )
{
//Call DestroyWindow instead of EndDialog .
DestroyWindow ( )
}
鍏舵錛岄渶瑕佹紜垹闄よ〃紺哄璇濈殑C++瀵硅薄銆傚浜庢ā寮忓鏉ヨ錛岃繖寰堝鏄擄紝闇瑕佸垱寤哄嚱鏁拌繑鍥炲悗鍗沖彲鍒犻櫎C++瀵硅薄錛涙棤妯″紡瀵硅瘽涓嶆槸鍚屾鐨勶紝鍒涘緩鍑芥暟璋冪敤鍚庣珛鍗寵繑鍥烇紝鍥犺岀敤鎴蜂笉鐭ラ亾浣曟椂鍒犻櫎C++瀵硅薄銆傛挙閿紿楀彛鏃跺伐浣滄璋冪敤CWnd : : PostNcDestroy錛屽彲浠ラ噸緗鍑芥暟騫舵墽琛屾竻闄ゆ搷浣滐紝璇稿鍒犻櫎this鎸囬拡銆?br />void CSampleDialog : : PostNcDestroy ( )
{
// Declete the C++ object that represents this dialog.
delete this
}
鏈鍚庯紝瑕佸垱寤烘棤妯″紡瀵硅瘽銆傚彲浠ヨ皟鐢–Dialog : : DoModal鍒涘緩涓涓ā寮忓鏀撅紝瑕佸垱寤轟竴涓棤妯″紡瀵硅瘽鍒欒璋冪敤CDialog: : Create銆備笅闈㈢殑渚嬪瓙璇存槑 浜?jiǎn)搴旂敤绋嬪簭鏄浣曞垱寰忔棤妯″紡瀵硅瘽鐨勫Q?璞★紱鏃犳ā寮忓璇濅笉鏄悓姝ョ殑錛屽垱寤哄嚱鏁拌皟鐢ㄥ悗绔嬪嵆榪斿洖錛?br />void CMainFrame : : OnSampleDialog ( )
{
//Allocate a modeless dialog object .
CSampleDilog * pDialog =new CSampleDialog
ASSERT_VALID (pDialog) Destroy ( )
//Create the modeless dialog . represents this dialog.
BOOL bResult = pDialog 鈥?gt; Create (IDD_IDALOG)
ASSERT (bResult )
}
錛?8錛?濡備綍闃叉涓繪紿楀彛鍦ㄥ叾璇存槑涓樉紺烘椿鍔ㄧ殑鏂囨。鍚?br />鍒涘緩涓繪紿楀彛鍜孧DI瀛愮獥鍙h繘閫氬父鍏鋒湁FWS_ADDTOTITLE椋庢牸浣嶏紝濡傛灉涓嶅笇鏈涘湪璇存槑涓嚜鍔ㄦ坊鍔犳枃妗e悕錛?蹇呴』紱佹璇ラ鏍間綅錛?鍙互浣跨敤ClassWizard閲嶇疆
CWnd: : PreCreateWindow騫跺叧闂璅WS_ADDTOTITLE椋庢牸銆?br />BOOL CMainFrame : : PreCreateWindow (CREATESTRUCT&cs)
{
//Turn off FWS_ADDTOTITLE in main frame .
cs.styel & = ~FWS_ADDTOTITLE 銆
return CMDIFrameWnd : : PreCreateWindow (cs )
}
鍏抽棴MDI瀛愮獥鍙g殑FWS _ADDTOTITLE椋庢牸灝嗗垱寤轟竴涓叿鏈夌┖鏍囬鐨勭獥鍙o紝鍙互璋冪敤CWnd: : SetWindowText鏉ヨ緗爣棰樸傝浣忚嚜宸辮緗爣棰樻椂瑕侀伒寰帴鍙i鏍兼寚鍗椼?/p>
錛?0錛?鎬庢牱鍔犺澆鍏朵粬鐨勫簲鐢ㄧ▼搴?
涓変釜SDK鍑芥暟 winexec, shellexecute,createprocess鍙互浣跨敤銆?br />WinExec鏈綆鍗曪紝涓や釜鍙傛暟錛屽墠涓涓寚瀹氳礬寰勶紝鍚庝竴涓寚瀹氭樉紺烘柟寮?鍚庝竴涓弬鏁板煎緱璇翠竴涓嬶紝姣斿娉ョ敤 SW_SHOWMAXMIZED鏂瑰紡鍘誨姞杞戒竴涓棤鏈澶у寲鎸夐挳鐨勭▼搴忥紝灝辨槸Neterm,calc絳夌瓑錛屽氨涓嶄細(xì)鍑虹幇姝e父鐨勭獥浣擄紝浣嗘槸宸茬粡琚姞鍒頒換鍔″垪琛ㄩ噷浜?jiǎn)銆?br />
ShellExecute杈?WinExex鐏墊椿涓鐐癸紝鍙互鎸囧畾宸ヤ綔鐩綍,涓嬮潰鐨凟xample灝辨槸鐩存帴鎵撳紑 c:\temp\1.txt,鑰屼笉鐢ㄥ姞杞戒笌 txt鏂囦歡鍏寵仈鐨勫簲鐢ㄧ▼搴?寰堝瀹夎紼嬪簭瀹屾垚鍚庨兘浼?xì)鎵撳紑涓涓獥鍙o紝鏉ユ樉紺篟eadme or Faq,鎴戠寽灝辨槸榪欎箞浣滅殑鍟?
ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED)
CreateProcess鏈澶嶆潅錛屼竴鍏辨湁鍗佷釜鍙傛暟錛屼笉榪囧ぇ閮ㄥ垎閮藉彲浠ョ敤NULL浠f浛錛屽畠鍙互鎸囧畾榪涚▼鐨勫畨鍏ㄥ睘鎬э紝緇ф壙淇℃伅錛岀被鐨勪紭鍏堢駭絳夌瓑.鏉ョ湅涓緢綆鍗曠殑Example:
STARTUPINFO stinfo
//鍚姩紿楀彛鐨勪俊鎭?br />PROCESSINFO procinfo //榪涚▼鐨勪俊鎭?br />
CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE,
NORMAL_PRIORITY_
CLASS,NULL,NULL, &stinfo,&procinfo)
錛?2錛?濡備綍浣胯兘鍜岀姝㈠伐鍏鋒潯鐨勫伐鍏鋒彁紺?br />濡傛灉璁劇疆浜?jiǎn)CBRS_TOOLTIPS椋庢牸浣嶏紝宸ュ叿鏉″皢鏄劇ず宸ュ叿鎻愮ず錛岃浣胯兘鎴栬呯姝㈠伐鍏鋒彁紺猴紝闇瑕佽緗垨鑰呮竻闄よ椋庢牸浣嶃備笅渚嬮氳繃璋冪敤CControlBar : : GetBarStyle鍜孋ControlBar : : SetBarStyle寤虹珛涓涓畬鎴愭鍔熻兘鐨勬垚鍛樺嚱鏁幫細(xì)
void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )
{
ASSERT_VALID (m_wndToolBar)
DWORD dwStyle = m _wndToolBar.GetBarStyle ( )
if (bDisplayTips) dwStyle 锝?CBRS_TOOLTIPS
else
dwStyle & = ~CBRS_TOOLTIPS
m_wndToolBar.SetBarStyle (dwStyle )
}
//Get pointer to toolbar .
CToolBar * pToolBar = (CToolBar * ) AfxGetMainWnd ( )
鈥?gt; GetDescendantWindow(AFX_IDW_TOOLBAR)
錛?3錛?濡備綍璁劇疆宸ュ叿鏉℃爣棰?br />宸ュ叿鏉℃槸涓涓獥鍙o紝鎵浠ュ彲浠ュ湪璋冪敤CWnd : : SetWindowText鏉ヨ緗爣棰橈紝渚嬪瓙濡備笅錛?br />int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreateStruct )
{
鈥?br />// Set the caption of the toolbar .
m_wndToolBar.SetWindowText (_T "Standdard")
}
錛?6錛?濡備綍鏀瑰彉瀵硅瘽鎴栫獥浣撹紿楃殑鑳屾櫙棰滆壊
璋冪敤CWinApp : : SetDialogBkColor鍙互鏀瑰彉鎵鏈夊簲鐢ㄧ▼搴忕殑鑳屾櫙棰滆壊銆傜涓涓弬鏁版寚瀹氫簡(jiǎn)鑳屾櫙棰滆壊錛岀浜屼釜鍙傛暟鎸囧畾浜?jiǎn)鏂囨湰棰滆墝觻備笅渚嬪皢搴旂敤紼嬪簭瀵硅瘽璁劇疆涓鴻摑鑹茶儗鏅拰榛勮壊鏂囨湰銆?br />BOOL CSampleApp : : InitInstance ( )
{
鈥?br />//use blue dialog with yellow text .
SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 ,255 , 0 ) )
鈥?br />}
闇瑕侀噸鐢誨璇濓紙鎴栧璇濈殑瀛愭帶浠訛級(jí)鏃訛紝W(xué)indows鍚戝璇濆彂閫佹秷鎭疻M_CTLCOLOR錛岄氬父鐢ㄦ埛鍙互璁¦indows閫夋嫨緇樼敾鑳屾櫙鐨勫埛瀛愶紝涔熷彲閲嶇疆璇ユ秷鎭寚瀹氬埛瀛愩備笅渚嬭鏄庝簡(jiǎn)鍒涘緩涓涓孩鑹茶儗鏅璇濈殑姝ラ銆?br />
棣栧厛錛岀粰瀵硅瘽鍩虹被澧炲姞涓浜烘垚鍛樺彉閲?br />CBursh :class CMyFormView : public CFormView
{
鈥?br />
private :
CBrush m_ brush // background brush
鈥?br />}
鍏舵錛?鍦ㄧ被鐨勬瀯閫犲嚱鏁頒腑灝嗗埛瀛愬垵濮嬪寲涓烘墍闇瑕佺殑鑳屾櫙棰滆壊銆?br />CMyFormView : : CMyFormView ( )
{
// Initialize background brush .
m_brush .CreateSolidBrush (RGB ( 0, 0, 255) )
}
鏈鍚庯紝浣跨敤ClassWizard澶勭悊WM_CTLCOLOR娑堟伅騫惰繑鍥炰竴涓敤鏉ョ粯鐢誨璇濊儗鏅殑鍒峰瓙鍙ユ焺銆傛敞鎰忥細(xì)鐢變簬褰撻噸鐢誨璇濇帶浠舵椂涔熻璋冪敤璇ュ嚱鏁幫紝鎵浠ヨ媯(gè)嫻媙CtlColor鍙傞噺銆?br />HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor
)
{
// Determine if drawing a dialog box . If we are, return +handle to
//our own background brush . Otherwise let windows handle it .
if (nCtlColor = = CTLCOLOR _ DLG )
return (HBRUSH) m_brush.GetSafeHandle ( )
return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor
)
}
錛?9錛?濡備綍鏀瑰彉鎺т歡鐨勫瓧浣?br />鐢變簬鎺т歡鏄篃鏄獥鍙o紝鐢ㄦ埛鍙互璋冪敤CWnd: : SetFont鎸囧畾鏂板瓧浣撱傝鍑芥暟鐢ㄤ竴涓狢font鎸囬拡錛岃淇濊瘉鍦ㄦ帶浠舵挙娑堜箣鍓嶄笉鑳芥挙娑堝瓧浣撳璞°備笅渚嬪皢涓嬪帇鎸夐挳鐨勫瓧浣撴敼涓?鐐笰rial瀛椾綋錛?br />//Declare font object in class declaration (.H file ).
private : Cfont m_font
// Set font in class implementation (.Cpp file ). Note m_wndButton is a
//member variable added by ClassWizard.DDX routines hook the member
//variable to a dialog button contrlo.
BOOL CSampleDialog : : OnInitDialog ( )
{
鈥?br />//Create an 8-point Arial font
m_font . CreateFont (MulDiv (8 , -pDC
鈥?gt; GetDeviceCaps(LOGPIXELSY) ,72). 0 , 0 , 0 , FW_NORMAL , 0 , 0,0, ANSI_CHARSER, OUT_STROKE_PRECIS ,
CLIP_STROKE _PRECIS , DRAFT _QUALITY
VARIABLE_PITCH 锝淔F_SWISS, _T("Arial") )
//Set font for push button .
m_wndButton . SetFont (&m _font )
鈥?br />}
錛?0錛?濡備綍鍦∣LE鎺т歡涓嬌鐢∣LE_COLOR鏁版嵁綾誨瀷
璇稿COleControl : : GetFortColor鍜孋OleControl : : GetBackColor絳夊嚱鏁拌繑鍥濷LE _COLOR鏁版嵁綾誨瀷鐨勯鑹詫紝鑰孏DI瀵硅薄璇稿絎斿拰鍒峰瓙浣跨敤鐨勬槸COLORREF鏁版嵁綾誨瀷錛岃皟鐢–OleControl : : TranslateColor鍙互寰堝鏄撳湴灝哋LE_COLOR綾誨瀷鏀逛負(fù)COLORREF綾誨瀷銆備笅渚嬪垱寤轟簡(jiǎn)涓涓綋鍓嶈儗鏅鑹茬殑鍒峰瓙錛?br />
void CSampleControl : : OnDraw (CDC* pdc
const Crect& rcBounds , const Crect& rcInvalid
)
{
//Create a brush of the cuttent background color.
CBrush brushBack (TranslateColor (GetBackColor () ) )
//Paint the background using the current backgroundcolor .
pdc鈥?gt; FilllRect (rcBounds , &brushBack)
//other drawign commands
鈥?br />}
錛?2錛?涓轟粈涔堟棆杞寜閽帶浠剁湅璧鋒潵鍊掕漿
闇瑕佽皟鐢–SpinCtrl : : SetRange 璁劇疆鏃嬭漿鎸夐挳鎺т歡鐨勮寖鍥達(dá)紝鏃嬭漿鎸夐挳鎺т歡鐨勭己鐪佷笂闄愪負(fù)0錛岀己鐪佷笅闄愪負(fù)100錛岃繖鎰忓懗鐫澧炲姞鏃舵棆杞寜鎺т歡鐨勫肩敱100鍙樹負(fù)0銆備笅渚嬪皢鏃嬭漿鎸夐挳鎺т歡鐨勮寖鍥磋緗負(fù)0鍒?00錛?br />BOOL CAboutDlg : : OnInitDialog ( )
{
CDialog : : OnInitDialog ( )
//set the lower and upper limit of the spin button
m_wndSpin . SetRange ( 0 ,100 )
return TRUE
}
Visual C++ 4.0 Print瀵硅瘽涓殑Copise鏃嬭漿鎸夐挳鎺т歡涔熸湁鍚屾牱鐨勯棶棰橈細(xì)鎸変笅Up鎸夐挳鏃舵嫹璐濈殑鏁扮洰鍑忓皯錛岃屾寜涓婦own 鎸夐挳鏃舵嫹璐濈殑鏁扮洰澧炲姞銆?/p>
錛?3錛?涓轟粈涔堟棆杞寜閽帶浠朵笉鑳借嚜鍔ㄥ湴鏇存柊瀹冧笅闈㈢殑緙栬緫鎺т歡
濡傛灉浣跨敤鏃嬭漿鎸夐挳鐨刟utu buddy鐗規(guī)э紝 鍒欏繀欏諱繚璇佸湪瀵硅瘽鐨勬爣璁伴『搴忎腑buddy紿楀彛浼樺厛浜庢棆杞寜閽帶浠躲備粠Layout鑿滃崟涓夋嫨Tab Order鑿滃崟欏癸紙鎴栬呮寜涓婥rtl+D錛夊彲浠ヨ緗璇濈殑鏍囩欏哄簭銆?/p>
錛?4錛?濡備綍鐢ㄤ綅鍥炬樉紺轟笅鍘嬫寜閽?br />Windows 95鎸夐挳鏈夊嚑澶勬柊鐨勫垱寤洪鏍鹼紝灝ゅ叾鏄疊S_BITMAP鍜孊S_ICON錛岃鎯沖叿鏈変綅鍥炬寜閽紝鍒涘緩鎸夐挳鍜岃皟鐢–Button : : SetBitmap鎴朇Button : : SetIcon鏃惰鎸囧畾BS_BITMAP鎴朆S_ICON椋庢牸銆?br />
棣栧厛錛岃緗寜閽殑鍥炬爣灞炴с傜劧鍚庯紝褰撳璇濆垵濮嬪寲鏃惰皟鐢–Button: : SetIcon銆傛敞鎰忥細(xì)涓嬩緥鐢ㄥ浘鏍囦唬鏇夸綅鍥撅紝浣跨敤浣嶅浘鏃惰灝忓績(jī)錛屽洜涓轟笉鐭ラ亾鑳屾櫙鎵鏈夌殑棰滆壊鈥斺斿茍闈炴瘡涓漢閮戒嬌鐢ㄦ祬鐏拌壊銆?br />
BOOL CSampleDlg : : OnInitDialog ( )
{
CDialog : : OnInitDialog ( )
//set the images for the push buttons .
BOOL CSampleDlg : : OnInitDialog ( )
{
CDialog : : OnInitDialog ( )
//set the images for the push buttons .
m_wndButton1.SetIcon (AfxGetApp ( ) 鈥?gt; LoadIcon (IDI _ IPTION1))
m_wndButton2.SetIcon (AfxGetApp ( ) 鈥?gt; LoadIcon (IDI _ IPTION2))
m_wndButton3.SetIcon (AfxGetApp ( ) 鈥?gt; LoadIcon (IDI _ IPTION3))
return TRUE
}
錛?5錛?濡備綍涓涓垱寤轟笁鎬佷笅鍘嬫寜閽?br />鍙互浣跨敤鏂扮殑BS_PUSHBUTTON 椋庢牸浣嶅拰媯(gè)嫻嬫浠ュ強(qiáng)鎸夐挳鏉ュ垱寤轟竴涓笁鎬佷笅鍘嬫寜閽傝繖寰堝鏄擄紝鍙渶灝嗘嫻嬫鍜屾寜閽嫋鎷夊埌瀵硅瘽涓茍鎸囧畾灞炴ush鈥攍ike鍗沖彲銆備笉鐢ㄤ換浣曢檮鍔犵▼搴忓氨鍙互鎴愪負(fù)涓夋佷笅鍘嬫寜閽?/p>
錛?6錛?濡備綍鍔ㄦ佸垱寤烘帶浠?br />鍒嗛厤涓涓帶浠跺璞$殑瀹炰緥騫惰皟鐢ㄥ叾Create鎴愬憳鍑芥暟銆傚紑鍙戣呮渶瀹規(guī)槗蹇界暐涓や歡浜嬶細(xì)蹇樿鎸囧畾WS_VISBLE鏍囩鍜屽湪鏍堜腑鍒嗛厤鎺т歡瀵硅薄銆備笅渚嬪姩鎬佸湴鍒涘緩涓涓笅鍘嬫寜閽帶浠訛細(xì)
//In class declaration (.H file ).
private : CButton* m _pButton
//In class implementation (.cpp file ) .
m_pButton =new CButton
ASSERT_VALID (m_pButton)
m_pButton 鈥?gt;Create (_T ("Button Title ") , WS_CHILD 锝淲S_VISIBLE 锝淏S_PUSHBUTTON. Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON )
錛?7錛?濡備綍闄愬埗緙栬緫妗嗕腑鐨勫噯璁稿瓧絎?br />濡傛灉鐢ㄦ埛鍦ㄧ紪杈戞帶浠朵腑鍙厑璁告帴鏀舵暟瀛楋紝鍙互浣跨敤涓涓爣鍑嗙殑緙栬緫鎺т歡騫舵寚瀹氭柊鐨勫垱寤烘爣蹇桬S_NUMBERS,瀹冩槸Windows 95鏂板鍔犵殑鏍囧織錛岃鏍囧織闄愬埗 緙栬緫鎺т歡鍙寜鏀舵暟瀛楀瓧絎︺傚鏋滅敤鎴烽渶瑕佸鏉傜殑緙栬緫鎺т歡錛屽彲浠ヤ嬌鐢∕icrosoft 鐨勫睆钄界紪杈戞帶浠訛紝瀹冩槸涓涓緢鏈夌敤鐨凮LE瀹氬埗鎺т歡銆?br />濡傛灉甯屾湜涓嶄嬌鐢∣LE 瀹氬埗鎺т歡鑷繁澶勭悊瀛楃錛屽彲浠ユ淳鐢熶竴涓狢Edit綾誨茍澶勭悊WM_CHAR娑堟伅錛岀劧鍚庝粠緙栬緫鎺т歡涓繃婊ゅ嚭鐗瑰畾鐨勫瓧絎︺傞鍏堬紝浣跨敤ClassWizard寤虹珛涓涓?CEdit鐨勬淳鐢熺被錛屽叾嬈★紝鍦ㄥ璇濈被涓寚瀹氫竴涓垚鍛樺彉閲忓皢緙栬緫鎺т歡鍒嗙被鍦∣nInitdialog 涓皟鐢–Wnd: : SubclassDlgItem .
//In your dialog class declaration (.H file )
private : CMyEdit m_wndEdit // Instance of your new edit control .
//In you dialog class implementation (.CPP file )
BOOL CSampleDialog : : OnInitDialog ( )
{
鈥?br />
//Subclass the edit lontrod .
m_wndEdit .SubclassDlgItem (IDC_EDIT,this)
鈥?br />}
浣跨敤ClassWizard澶勭悊WM_CHAR娑堟伅錛岃綆梟Char鍙傞噺騫跺喅瀹氭墍鎵ц鐨勬搷浣滐紝鐢ㄦ埛鍙互紜畾鏄惁淇敼銆佷紶閫佸瓧絎︺備笅渚嬭鏄庝簡(jiǎn)濡備綍鏄劇ず瀛楁瘝瀛楃錛屽鏋滃瓧絎︽槸瀛楁瘝瀛楃錛屽垯璋冪敤CWnd OnChar錛屽惁鍒欎笉璋冪敤OnChar.
//Only display alphabetic dharacters .
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )
{
//Determine if nChar is an alphabetic character.
if (: : IsCharAlpha ( ( TCHAR) nChar ) )
CEdit : : OnChar (nChar, nRepCnt , nFlags )
}
濡傛灉瑕佷慨鏀瑰瓧絎︼紝鍒欎笉鑳戒粎浠呯畝鍗曞湴鐢ㄤ慨鏀硅繃鐨刵Char璋冪敤CEdit: : OnChar錛岀劧鍚嶤Edit: : OnChar璋冪敤CWnd: : Default鑾峰彇鍘熸潵鐨剋Param 鍜宭Param 鐨勫鹼紝榪欐牱鏄笉琛岀殑銆傝淇敼涓涓瓧絎︼紝闇瑕侀鍏堜慨鏀筺Char錛岀劧鍚庣敤淇敼榪囩殑nChar璋冪敤CWnd: : DefWindowProc銆備笅渚嬭鏄庝簡(jiǎn)濡備綍灝嗗瓧絎﹁漿鍙樹負(fù)澶у啓錛?br />//Make all characters uppercase
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )
{
//Make sure character is uppercase .
if (: : IsCharAlpha ( .( TCHAR) nChar)
nChar=: : CharUpper(nChar )
//Bypass default OnChar processing and directly call
//default window proc.
DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt, nFlags ))
}
錛?8錛?濡備綍鏀瑰彉鎺т歡鐨勯鑹?br />鏈変袱縐嶆柟娉曘傚叾涓錛屽彲浠ュ湪鐖剁被涓寚瀹氭帶浠剁殑棰滆壊錛屾垨鑰呭埄鐢∕FC4.0鏂扮殑娑堟伅鍙嶅皠鍦ㄦ帶浠剁被涓寚瀹氶鑹層?褰撴帶浠墮渶瑕侀噸鏂扮潃鑹叉椂錛屽伐浣滄璋冪敤鐖剁獥鍙o紙閫氬父鏄璇濇錛夌殑CWnd: : OnCrtlColor,鍙互鍦ㄧ埗紿楀彛綾諱腑閲嶇疆璇ュ嚱鏁板茍鎸囧畾鎺т歡鐨勬柊鐨勭粯鐢誨睘鎬с備緥濡傦紝涓嬭堪浠g爜灝嗗璇濅腑鐨勬墍鏈夌紪杈戞帶浠舵枃鏈鑹叉敼涓虹孩鑹詫細(xì)
HBRUSH CAboutDig : : OnCtlColor (CDC * pDCM , CWnd * pWnd , UINT nCtlColor)
{
HBRUSH hbr = CDialog : : OnCtlColor (pDC, pWnd , nCtlColor )
//Draw red text for all edit controls .
if (nCtlColor= = CTLCOLOR_EDIT )
pDC 鈥?gt; SetTextColor (RGB (255, 0 , 0 , ) )
return hbr
}
鐒惰岋紝鐢變簬姣忎釜鐖剁獥鍙e繀欏誨鐞嗛氱煡娑堟伅騫舵寚瀹氭瘡涓帶浠剁殑緇樼敾灞炴э紝鎵浠ワ紝榪欑鏂規(guī)硶涓嶆槸瀹屽叏鐨勯潰鍚戝璞$殑鏂規(guī)硶銆傛帶浠跺鐞嗚娑堟伅騫舵寚瀹氱粯鐢誨睘鎬ф洿鍚堟儏鍚堢悊銆傛秷鎭弽灝勫厑璁哥敤鎴瘋繖鏍峰仛銆傞氱煡娑堟伅棣栧厛鍙戦佺粰鐖剁獥鍙o紝濡傛灉鐖剁獥鍙f病鏈夊鐞嗗垯鍙戦佺粰鎺т歡銆傚垱寤轟竴涓畾鍒跺僵鑹插垪琛ㄦ鎺т歡蹇呴』閬靛驚涓嬭堪姝ラ銆?br />
棣栧厛錛屼嬌鐢–lassWizard 鍒涘緩涓涓狢ListBox 鐨勬淳鐢熺被騫朵負(fù)璇ョ被娣誨姞涓嬭堪鏁版嵁鎴愬憳銆?br />class CMyListBox publilc CListBox
{
鈥?br />private
COLORREF m_clrFor // foreground color
COLORREF m_clrBack //background color
Cbrush m_brush //background brush
鈥?br />}
鍏舵錛屽湪綾葷殑鏋勯犲嚱鏁頒腑錛屽垵濮嬪寲鏁版嵁涓?br />CMyListBox : : CMyListBox ()
{
//Initialize data members .
m_clrFore =RGB (255 , 255 , 0) //yellow text
m_clrBack=RGB (0 , 0 , 255) // blue background
m_brush . CreateSolidBrush (m _clrBack )
}
鏈鍚庯紝浣跨敤ClassWizard澶勭悊鍙嶅皠鐨刉M_CTLCOLOR(=WM_CTLCOLOR)娑堟伅騫舵寚瀹氭柊鐨勭粯鐢誨睘鎬с?br />HBRUSH CMyListBox : : CtlColor (CDC* pDC, UINT nCtlColor )
{
pDC鈥?gt;SetTextColor (m_clrFore)
pDC鈥?gt;SetBkColor (m_clrBack)
return (HBRUSH) m_brush.GetSafeHandle ()
}
鐜板湪錛屾帶浠跺彲浠ヨ嚜宸卞喅瀹氬浣曠粯鐢伙紝涓庣埗紿楀彛鏃犲叧銆?/p>
錛?9錛?褰撳悜鍒楄〃妗嗕腑娣誨姞澶氫釜欏規(guī)椂濡備綍闃叉闂儊
璋冪敤CWnd::SetRedraw 娓呴櫎閲嶇敾鏍囧織鍙互紱佹CListBox錛堟垨鑰呯獥鍙o級(jí)閲嶇敾銆傚綋鍚戝垪琛ㄦ娣誨姞鍑犱釜欏規(guī)椂錛岀敤鎴峰彲浠ユ竻闄ら噸鐢繪爣蹇楋紝鐒跺悗娣誨姞欏癸紝鏈鍚庢仮澶嶉噸鐢繪爣蹇椼備負(fù)紜繚閲嶇敾鍒楄〃妗嗙殑鏂伴」錛岃皟鐢⊿etRedraw (TRUE) 涔嬪悗璋冪敤CWnd::Invalidate銆?br />//Disable redrawing.
pListBox->SetRedraw (FALSE)
//Fill in the list box gere
//Enable drwing and make sure list box is redrawn.
pListBox->SetRedraw (TRUE)
pListBox->Invalidate ()
錛?0錛?濡備綍鍚戠紪杈戞帶浠朵腑娣誨姞鏂囨湰
鐢變簬娌℃湁CEdit:: AppendText鍑芥暟錛岀敤鎴峰彧濂借嚜宸卞仛姝ら」宸ヤ綔銆傝皟鐢–Edit:: SetSel縐誨姩鍒扮紪杈戞帶浠舵湯灝撅紝鐒跺悗璋冪敤CEdit:: ReplaceSel娣誨姞鏂囨湰銆備笅渚嬫槸AppendText 鐨勪竴縐嶅疄鐜版柟娉曪細(xì)
void CMyEdit:: AppendText (LPCSTR pText)
{
int nLen=GetWindowTextLength ()
SetFocus ()
SetSel (nLen, nLen)
ReplaceSel (pText)
}
錛?1錛?濡備綍璁塊棶棰勫畾涔夌殑GDI瀵硅薄
鍙互閫氳繃璋冪敤CDC:: SlectStockObject浣跨敤Windows鐨勫嚑涓瀹氫箟鐨勫璞★紝璇稿鍒峰瓙銆佺瑪浠ュ強(qiáng)瀛椾綋銆備笅渚嬩嬌鐢ㄤ簡(jiǎn)Windows棰勫畾涔夌殑絎斿拰鍒峰瓙GDI瀵硅薄鍦ㄨ紿椾腑鐢諱竴涓き鍦嗐?br />//Draw ellipse using stock black pen and gray brush.
void CSampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView
GetClientRect (rcView)
//Use stock black pen and stock gray brush to draw ellipse.
pDC->SelectStockObject (BLACK_PEN)
pDC->SelectStockObject (GRAY_BRUSH)
//Draw the ellipse.
pDC->Ellipse (reView)
}
涔熷彲浠ヨ皟鐢ㄦ柊鐨凷DK鍑芥暟GetSysColorBrush鑾峰彇涓涓郴緇熼鑹插埛瀛愶紝涓嬩緥鐢ㄨ儗鏅壊鍦ㄨ紿椾腑鐢諱竴涓き鍦嗭細(xì)
void CsampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView
GetClientRect (rcView)
//Use background color for tooltips brush.
CBrush * pOrgBrush=pDC->SelectObject ( CBrush ::FromHandle( ::GetSysColorBrush (COLOR_INFOBK)))
//Draw the ellipse.
pDC->Ellipse (rcView)
//Restore original brush.
pDC->SelectObject (pOrgBrush)
}
錛?2錛?濡備綍鑾峰彇GDI瀵硅薄鐨勫睘鎬т俊鎭?br />鍙互璋冪敤GDIObject:: GetObject銆傝繖涓嚱鏁板皢鎸囧畾鍥捐〃璁懼鐨勬秷鎭啓鍏ュ埌緙撳啿鍖恒備笅渚嬪垱寤轟簡(jiǎn)鍑犱釜鏈夌敤鐨勮緟鍔╁嚱鏁般?br />//Determine if font is bold.
BOOL IsFontBold (const CFont&font)
{
LOGFONT stFont
font.GetObject (sizeof (LOGFONT), &stFont)
return (stFont.lfBold)? TRUE: FALSE
}
//Return the size of a bitmap.
CSize GetBitmapSize (const CBitmap&bitmap)
{
BITMAP stBitmap
bitmap.GetObject (sizeof (BITMAP), &stBitmap)
return CSize (stBitmap.bmWidth, stBitmap.bmHeight)
}
//Create a pen with the same color as a brush.
BOOL CreatePenFromBrush (Cpen&pen, cost Cbrush&brush)
{
LOGBRUSH stBrush
brush.Getobject (sizeof (LOGBRUSH), &stBrush)
return pen. Createpen (PS_SOLID, 0, stBrush.ibColor)
}
錛?3錛?濡備綍瀹炵幇涓涓鐨尯鐭╁艦
CRectTracker鏄竴涓緢鏈夌敤鐨勭被錛屽彲浠ラ氳繃璋冪敤CRectTracker::TrackRubberBand 鍝嶅簲WM_LBUTTONDOWN娑堟伅鏉ュ垱寤轟竴涓鐨尯鐭╁艦銆?br />涓嬩緥琛ㄦ槑浣跨敤CRectTracker縐誨姩鍜岄噸緗紿椾腑鐨勮摑鑹叉き鍦嗙殑澶у皬鏄緢瀹規(guī)槗鐨勪簨鎯呫?br />
棣栧厛錛屽湪鏂囦歡妗d腑澹版槑涓涓狢RectTracker鏁版嵁鎴愬憳錛?br />class CSampleView : Public CView
{
鈥?br />public :
CrectTracker m_tracker
鈥?br />}
鍏舵錛屽湪鏂囨。綾葷殑鏋勯犲嚱鏁頒腑鍒濆鍖朇RectTracker 瀵硅薄錛?br />CSampleDoc:: CSampleDOC ()
{
//Initialize tracker position, size and style.
m_tracker.m_rect.SetRect (0, 0, 10, 10)
m_tracker.m_nStyle=CRectTracker:: resizeInside | CRectTracker ::dottedLine
}
鐒跺悗錛屽湪OnDraw鍑芥暟涓敾妞渾鍜岃釜榪圭煩褰細(xì)
void CSampleView:: OnDraw (CDC* pDC)
{
CSampleDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoc)
//Select blue brush into device context.
CBrush brush (RGB (0, 0, 255))
CBrush* pOldBrush=pDC->SelectObject (&brush)
//draw ellipse in tracking rectangle.
Crect rcEllipse
pDoc->m_tracker.GetTrueRect (rcEllipse)
pDC->Ellipse (rcEllipse)
//Draw tracking rectangle.
pDoc->m_tracker.Draw (pDC)
//Select blue brush out of device context.
pDC->Selectobject (pOldBrush)
}
鏈鍚庯紝浣跨敤ClassWizard澶勭悊WM_LBUTTONDOWN娑堟伅錛屽茍澧炲姞涓嬭堪浠g爜銆傝孌典唬鐮佹牴鎹紶鏍囧嚮閿儏鍐靛彲浠ユ嫋鏀俱佺Щ鍔ㄦ垨鑰呴噸緗き鍦嗙殑澶у皬銆?br />void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)
{
//Get pointer to document.
CSampleDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoc)
//If clicked on ellipse, drag or resize it.Otherwise create a
//rubber-band rectangle nd create a new ellipse.
BOOL bResult=pDoc->m_tracker.HitTest (point)!= CRectTracker::hitNothing
//Tracker rectangle changed so update views.
if (bResult)
{
pDoc->m_tracker.Track (this,point,TRue)
pDoc->SetModifiedFlag ()
pDoc->UpdateAllViews (NULL)
}
else
pDoc->m-tracker.TrackRubberBand(this,point,TRUE)
CView:: onLButtonDown (nFlags,point)
}
錛?4錛?濡備綍鏇存柊緲昏漿鑳屾櫙棰滆壊鐨勬枃鏈?br />璋冪敤CDC:: SetBkmode騫朵紶閫丱PAQUE鐢ㄥ綋鍓嶇殑鑳屾櫙棰滆壊濉厖鑳屾櫙錛屾垨鑰呰皟鐢–DC::SetBkMode騫朵紶閫乀RANSPAARENT浣胯儗鏅繚鎸佷笉鍙橈紝榪欎袱縐嶆柟娉曢兘鍙互璁劇疆鑳屾櫙妯″紡銆備笅渚嬭緗儗鏅ā寮忎負(fù)TRANSPARENT錛屽彲浠ヤ袱嬈℃洿鏂頒覆錛岀敤鑺辮壊甯﹂粦闃村獎(jiǎng)鏇存柊鏂囨湰銆傞粦鑹蹭覆鍦ㄧ孩鑹蹭覆涔嬪悗錛屼絾鐢變簬璁劇疆浜?jiǎn)鑳屾櫙妯″紡浠嶇劧鍙銆?br />
void CSampleView:: OnDraw (CDC* pDC)
{
//Determint size of view.
CRect rcView
GetClientRect (rcVieew)
//Create sample string to display.
CString str (_T ("Awesome Shadow Text錛庯紟錛?))
//Set the background mode to transparent.
pDC->SetBKMode (TRANSPARENT)
//Draw black shadow text.
rcView.OffsetRect (1, 1)
pDc->SetTextColor (RGB (0, 0, 0))
pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER)
//Draw red text.
rcView.OffsetRect (-1,-1)
pDc->SetTextColor (RGB (255, 0, 0))
pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER)
}
錛?5錛?濡備綍鍒涘緩涓涓叿鏈夌壒瀹氱偣澶у皬鐨勫瓧浣?br />鍙互鎸囧畾瀛椾綋閫昏緫鍗曚綅鐨勫ぇ灝忥紝浣嗘湁鏃舵寚瀹氬瓧浣撶殑鐐圭殑澶у皬鍙兘浼?xì)鏇存柟渚夸竴浜涖傚彲浠ュ涓嬪皢瀛椾綋鐨勭偣杞崲涓哄瓧浣撶殑楂樺害錛?br />
int nHeigth=mulDiv (nPointSize, -dc.GetDeviceCaps (LOGPIXELSY), 72)
涓嬩緥鍒涘緩浜?jiǎn)涓涓?鐐圭殑Apial瀛椾綋錛?br />鈥?br />CClientDC dc (AqfxGetMainWnd ())
m_font. CreateFont (MulDiv (8, -dc.GetDeviceCaps (LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF-SWISS,_T("Arial"))
錛?6錛?濡備綍璁$畻涓涓覆鐨勫ぇ灝?br />鍑芥暟CDC:: Det text Extent 鏍規(guī)嵁褰撳墠閫夋嫨鐨勫瓧浣撹綆椾竴涓覆鐨勯珮搴﹀拰瀹藉害銆傚鏋滀嬌鐢ㄧ殑涓嶆槸緋葷粺瀛椾綋鑰屾槸鍏朵粬瀛椾綋錛屽垯鍦ㄨ皟鐢℅etTextExtent涔嬪墠灝嗗瓧浣撻夎繘璁懼涓婁笅鏂囦腑鏄緢閲嶈鐨勶紝鍚﹀垯璁$畻楂樺害鍜屽搴︽椂灝嗕緷鎹郴緇熷瓧浣擄紝鐢辨寰楀嚭鐨勭粨鏋滃綋鐒舵槸涓嶆紜殑銆備笅榪版牱鏉跨▼搴忓綋鏀瑰彉涓嬪帇鎸夐挳鐨勬爣棰樻椂鍔ㄦ佽皟鏁存寜閽殑澶у皬錛屾寜閽殑澶у皬鐢辨寜閽殑瀛椾綋鍜屾爣棰樼殑澶у皬鑰屽畾銆傚搷搴旀秷鎭疻M_SETTEXT鏃惰皟鐢∣nSetText錛岃娑堟伅浣跨敤ON_MESSAE瀹忔寚浠ゅ畾涔夌殑鐢ㄦ埛鑷畾涔夋秷鎭?br />
LRESULT CMyButton:: OnSettext (WPARAM wParam, LPARAM lParam)
{
//Pass message to window procedure.
LRESULT bResult=CallWindowProc (*GetSuperWndProcAddr(), m_hWnd, GetCurrentMessage() ->message,wParam,lParam)
//Get title of push button.
CString strTitle
GetWindowText (strTitle)
//Select current font into device context.
CDC* pDC=GetDc ()
CFont*pFont=GetFont ()
CFont*pOldFont=pDC->SelectObject (pFont)
//Calculate size of title.
CSize size=pDC->GetTextExent (strTitle,strTitle.GetLength())
//Adjust the button's size based on its title.
//Add a 5-pixel border around the button.
SetWindowPos (NULL, 0, 0, size.cx+10, size.cy+10, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE)
//Clean up.
pDC->SelectFont (pOldFont)
ReleaseDC (pDC)
return bResult
}
錛?7錛?濡備綍鏄劇ず鏃嬭漿鏂囨湰
鍙鐢ㄦ埛浣跨敤TrueType鎴栬匞DI絎旀垨瀛椾綋灝卞彲浠ユ樉紺烘棆杞枃鏈?鏈変簺紜歡璁懼涔熸敮鎸佹棆杞厜鏍呭瓧浣擄級(jí)銆侺OGFONT緇撴瀯涓殑ifEscapement鎴愬憳鎸囧畾浜?jiǎn)鏂囨湰琛屽拰x杞寸殑瑙掑害錛岃搴︾殑鍗曚綅鏄崄鍒嗕箣涓搴﹁屼笉鏄害錛屼緥濡傦紝ifEscapement涓?50琛ㄧず瀛椾綋鏃嬭漿45搴︺備負(fù)紜繚鎵鏈夌殑瀛椾綋娌垮潗鏍囩郴緇熺殑鍚屼竴鏂瑰悜鏃嬭漿錛屼竴瀹氳璁劇疆ifEscapement鎴愬憳鐨凜LIP_LH_ANGLES浣嶏紝鍚﹀垯錛屾湁浜涘瓧浣撳彲鑳藉弽鍚戞棆杞備笅渚嬩嬌鐢ㄤ簡(jiǎn)14鐐笰rial瀛椾綋姣忛棿闅?5搴︾敾涓涓覆銆?br />void CSampleView:: OnDraw (CDC* pDC)
{
//Determine the size of the window.
CRect rcClient
GetClientRect (rcClient)
//Create sample string.
CString str (_T ("Wheeee錛庯紟錛嶪 am rotating!"))
//Draw transparent, red text.
pDC->SetBkMode (TRANSPARENT)
pDC->SetTextColor (RGB (255,0,0))
CFont font
//font object
LOGFONT stFont //font definition
//Set font attributes that will not change.
memset (&stFont, 0, sizeof (LOGFONT))
stFont.ifheight=MulDiv (14, -pDC->GetDeviceCaps(LOGPIXELSY), 72)
stFont.ifWeight=FW_NORMAL
stFont.ifClipPrecision=LCIP_LH_ANGLES
strcpy (stFont.lfFaceName, "Arial")
//Draw text at 15degree intervals.
for (int nAngle=0 nAngle<3600 nAngle+=150)
{
//Specify new angle.
stFont.lfEscapement=nAngle
//Create and select font into dc.
font.CreateFontIndirect(&stfont)
CFont* pOldFont=pDC ->SelectObject(&font)
//Draw the text.
pDC->SelectObject(pOldFont)
font.DelectObjext()
}
}
錛?8錛?濡備綍姝g‘鏄劇ず鍖呭惈鏍囩瀛楃鐨勪覆
璋冪敤GDI鏂囨湰緇樼敾鍑芥暟鏃墮渶瑕佸睍寮鏍囩瀛楃錛岃繖鍙互閫氳繃璋冪敤CDC:: TabbedTextOut鎴栬匔DC:: DrawText騫舵寚瀹欴T_EXPANDTABS鏍囧織鏉ュ畬鎴愩俆abbedTextOut鍑芥暟鍏佽鎸囧畾鏍囩浣嶇殑鏁扮粍錛屼笅渚嬫寚瀹氭瘡20璁懼鍗曚綅灞曞紑涓涓爣絳撅細(xì)
void CSampleView:: OnDraw (CDC* pDC)
{
CTestDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoC)
CString str
str.Format (_T ("Cathy\tNorman\tOliver"))
int nTabStop=20 //tabs are every 20 pixels
pDC->TabbedtextOut (10, 10, str, 1, &nTabStop, 10)
}
錛?9錛?濡備綍蹇熷湴鏍煎紡鍖栦竴涓狢String瀵硅薄
璋冪敤CString:: Format錛岃鍑芥暟鍜宲rintf鍑芥暟鍏鋒湁鐩稿悓鐨勫弬鏁幫紝涓嬩緥璇存槑浜?jiǎn)濡備綍鋴社敤Format鍑芥暟錛?br />
//Get size of window.
CRect rcWindow
GetWindowRect (rcWindow)
//Format message string.
CString strMessage
strMessage.Format (_T ("Window Size (%d, %d)"),
rcWindow.Width (), rcWindow.Height ())
//Display the message.
MessageBox (strmessage)
錛?0錛?涓插お闀挎椂濡備綍鍦ㄥ叾鏈熬鏄劇ず涓涓渷鐣ュ彿
璋冪敤CDC:: DrawText騫舵寚瀹欴T_END_ELLIPSIS鏍囧織錛岃繖鏍峰氨鍙互鐢ㄥ皬鐣ュ彿鍙栦唬涓叉湯灝劇殑瀛楃浣垮叾閫傚悎浜庢寚瀹氱殑杈圭晫鐭╁艦銆傚鏋滆鏄劇ず璺緞淇℃伅錛屾寚瀹欴T_END_ELLIPSIS鏍囧織騫剁渷鐣ュ彿鍙栦唬涓蹭腑闂寸殑瀛楃銆?br />
void CSampleView:: OnDraw (CDC* pDC)
{
CTestDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoc)
//Add ellpsis to end of string if it does not fit
pDC->Drawtext (CString ("This is a long string"), CRect (10, 10, 80, 30), DT_LEFT | DT_END_ELLIPSIS)
//Add ellpsis to middle of string if it does not fit
pDC->DrawText (AfxgetApp () ->m_pszhelpfilePath, CRect (10, 40, 200, 60), DT_LEFT | DT_PATH_ELLIPSIS)
}
錛?1錛?涓轟粈涔堝嵆浣胯皟鐢‥nableMenuItem鑿滃崟欏瑰悗錛岃彍鍗曢」榪樺浜庣姝㈢姸鎬?br />闇瑕佸皢CFrameWnd:: m_bAutomenuEnable璁劇疆涓篎ALSE錛屽鏋滆鏁版嵁鎴愬憳涓篢RUE錛堢己鐪佸鹼級(jí)錛屽伐浣滄灝嗚嚜鍔ㄥ湴紱佹娌℃湁ON_UPDATE_COMMAND_UI鎴栬匫N_COMMAND鐨勮彍鍗曢」銆?br />
//Disable MFC from automatically disabling menu items.
m_bAuoMenuEnable=FALSE
//Now enable the menu item.
CMenu* pMenu=GetMenu ()
ASSERT_VALID (pMenu)
pMenu->EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED)
錛?2錛?濡備綍緇欑郴緇熻彍鍗曟坊鍔犱竴涓彍鍗曢」
緇欑郴緇熻彍鍗曟坊鍔犱竴涓彍鍗曢」闇瑕佽繘琛屼笅榪頒笁涓楠わ細(xì)
棣栧厛錛屼嬌鐢≧esource Symbols瀵硅瘽錛堝湪View鑿滃崟涓夋嫨Resource Symbols錛庯紟錛庡彲浠ユ樉紺鴻瀵硅瘽錛夊畾涔夎彍鍗曢」ID錛岃ID搴斿ぇ浜?x0F鑰屽皬浜?xF000錛?br />鍏舵錛岃皟鐢–Wnd::GetSystemMenu鑾峰彇緋葷粺鑿滃崟鐨勬寚閽堝茍璋冪敤CWnd:: Appendmenu灝嗚彍鍗曢」娣誨姞鍒拌彍鍗曚腑銆備笅渚嬬粰緋葷粺鑿滃崟娣誨姞涓や釜鏂扮殑
int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
{
鈥?br />//Make sure system menu item is in the right range.
ASSERT (IDM_MYSYSITEM &0xFFF0)==IDM_MYSYSITEM)
ASSERT (IDM-MYSYSITEM<0xF000)
//Get pointer to system menu.
CMenu* pSysmenu=GetSystemmenu (FALSE)
ASSERT_VALID (pSysMenu)
//Add a separator and our menu item to system menu.
CString StrMenuItem (_T ("New menu item"))
pSysMenu->Appendmenu (MF_SEPARATOR)
pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem)
鈥?br />}
鐜板湪錛岄夋嫨緋葷粺鑿滃崟欏規(guī)椂鐢ㄦ埛搴旇繘琛屾嫻嬨備嬌鐢–lassWizard澶勭悊WM_SYSCOMMAND娑堟伅騫舵嫻嬬敤鎴瘋彍鍗曠殑nID鍙傛暟錛?br />void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam)
{
//Determine if our system menu item was selected.
if ( (nID & 0xFFF0)==IDM_MYSYSITEM)
{
//TODO-process system menu item
}
else
CMDIFrameWnd ::OnSysCommand (nID, lParam)
}
鏈鍚庯紝涓涓璁¤壇濂界殑UI搴旂敤紼嬪簭搴斿綋鍦ㄧ郴緇熻彍鍗曢」鍔犱寒鏃跺湪鐘舵佹潯鏄劇ず涓涓府鍔╀俊鎭紝榪欏彲浠ラ氳繃澧炲姞涓涓寘鍚郴緇熻彍鍗曞熀ID鐨勪覆琛ㄧ殑鍏ュ彛鏉ュ疄鐜般?/p>
錛?3錛?濡備綍紜畾欏跺眰鑿滃崟鎵鍗犳嵁鐨勮彍鍗曡鏁?br />榪欏彲浠ラ氳繃綆鍗曠殑鍑忔硶鍜岄櫎娉曟潵瀹炵幇銆傞鍏堬紝鐢ㄦ埛闇瑕佽綆椾富妗嗙獥鍙g殑楂樺害鍜屽鎴峰尯錛涘叾嬈★紝浠庝富妗嗙獥鍙g殑楂樺害涓噺鍘誨鎴峰尯銆佹杈圭晫浠ュ強(qiáng)鏍囬鐨勯珮搴︼紱鏈鍚庯紝闄や互鑿滃崟鏍忕殑楂樺害銆備笅渚嬫垚鍛樺嚱鏁版槸涓涓綆椾富妗嗚彍鍗曟墍鍗犳嵁鐨勮鏁扮殑浠g爜瀹炵幇銆?br />
int CMainFrame:: GetMenuRows ()
{
CRect rcFrame,rcClient
GetWindowRect (rcFrame)
GetClientRect (rcClient)
return (rcFrame.Height () -rcClient.Height () - :: GetSystemMetrics(SM_CYCAPTION) - (:: getSystemMetrics(SM_CYFRAME) *2)) / :: GetSystemMetrics(SM_CYMENU)
}
錛?4錛?鍦ㄧ敤鎴風(fēng)幆澧冧腑濡備綍紜畾緋葷粺鏄劇ず鍏冪礌鐨勯鑹?br />璋冪敤SDK鍑芥暟GetSysColor鍙互鑾峰彇涓涓壒瀹氭樉紺哄厓绱犵殑棰滆壊銆備笅渚嬭鏄庝簡(jiǎn)濡備綍鍦∕FC鍑芥暟CMainFrameWnd:: OnNcPaint涓皟鐢ㄨ鍑芥暟璁劇疆紿楀彛鏍囬棰滆壊銆?br />
void CMiniFrameWnd:: OnNcPaint ()
{
鈥?br />dc.SetTextColor (:: GetSysColor (m_bActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT))
鈥?/p>
錛?5錛?濡備綍鏌ヨ鍜岃緗郴緇熷弬鏁?br />鍦╓indows 3.1 SDK涓粙緇嶈繃SDK鍑芥暟SystemParametersInfo錛岃皟鐢ㄨ鍑芥暟鍙互鏌ヨ鍜岃緗郴緇熷弬鏁幫紝璇稿鎸夐敭鐨勯噸澶嶉熺巼璁劇疆銆侀紶鏍囧弻鍑誨歡榪熸椂闂淬佸浘鏍囧瓧浣撲互鍙?qiáng)妗岄潰瑕嗙洊浣嶅泟…壗{夈?br />
//Create a font that is used for icon titles.
LOGFONT stFont
鈭? SystemParametersInfo (SPIF_GETICONTITLELOGFONT, sizeof (LOGFONT), &stFont, SPIF_SENDWININICHANGE)
m_font.CreateFontIndirect (&stFont)
//Change the wallpaper to leaves.bmp.
鈭?: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, _T (" forest.bmp"), SPIF_UPDATEINIFILE)
錛?6錛?濡備綍紜畾褰撳墠灞忓箷鍒嗚鯨鐜?br />璋冪敤SDK鍑芥暟GetSystemMetrics錛岃鍑芥暟鍙互媯(gè)绱㈡湁鍏硍indows鏄劇ず淇℃伅錛岃濡傛爣棰樺ぇ灝忋佽竟鐣屽ぇ灝忎互鍙?qiáng)婊氬姩鏉″ぇ灏徑{夌瓑銆?br />
//Initialize CSize object with screen size.
CSize sizeScreen (GetSystemMetrics (SM_CXSCREEN),
GetSystemMetrics (SM_CYSCREEN))
錛?7錛?濡備綍浣跨敤涓涓瀹氫箟鐨刉indows鍏夋爣
璋冪敤CWinApp:: LoadStandardCursor騫朵紶閫佸厜鏍囨爣璇嗙銆?br />BOOL CSampleDialog:: OnSetCursor (CWnd* pWnd,
UINT nHitTest, UINT
message)
{
//Display wait cursor if busy.
if (m_bBusy)
{
SetCursor (AfxGetApp () ->LoadStandardCursor (IDC_WAIT))
return TRUE
}
return CDialog:: OnSetCursor (pWnd. nHitTest,message)
}
錛?8錛?濡備綍媯(gè)绱㈠師鍏堢殑Task Manager搴旂敤紼嬪簭浣跨敤鐨勪換鍔″垪琛?br />鍘熷厛鐨凾ask Manager搴旂敤紼嬪簭鏄劇ず欏跺眰紿楀彛鐨勫垪琛ㄣ備負(fù)浜?jiǎn)鏄窘C鴻鍒楄〃錛岀獥鍙e繀欏誨彲瑙併佸寘鍚竴涓爣棰樹互鍙?qiáng)涓嶈兘琚叾浠柦H楀彛鎷ユ湁銆傝皟鐢–Wnd:: GetWindow鍙互媯(gè)绱㈤《灞傜獥鍙g殑鍒楄〃錛岃皟鐢↖sWindowVisible銆丟etWindowTextLength浠ュ強(qiáng)GetOwner鍙互紜畾紿楀彛鏄惁搴旇鍦ㄥ垪琛ㄤ腑銆備笅渚嬪皢鎶奣askManager紿楀彛鐨勬爣棰樺~鍏呭埌鍒楄〃涓?br />
void GetTadkList (CListBox&list)
{
CString strCaption
//Caption of window.
list.ResetContent ()
//Clear list box.
//Get first Window in window list.
ASSERT_VALID (AfxGetMainWnd ())
CWnd* pWnd=AfxGetMainWnd () ->GetWindow (GW_HWNDFIRST)
//Walk window list.
while (pWnd)
{
// I window visible, has a caption, and does not have an owner?
if (pWnd ->IsWindowVisible()
&& pWnd ->GetWindowTextLength ()
&&! pWnd ->GetOwner ())
{
//Add caption o window to list box.
pWnd ->GetWindowText (strCaption)
list.AddString (strCaption)
}
//Get next window in window list.
pWnd=pWnd ->GetWindow(GW_HWNDNEXT)
}
}
錛?9錛?濡備綍紜畾Windows鍜學(xué)indows緋葷粺鐩綍
鏈変袱涓猄DK鍑芥暟鍙互瀹屾垚璇ュ姛鑳姐侴etWindowsDirectory鍜孏etSystemDirectory錛屼笅渚嬭鏄庝簡(jiǎn)濡備綍浣跨敤榪欎袱涓嚱鏁幫細(xì)
TCHAR szDir [MAX_PATH]
//Get the full path of the windows directory.
鈭?: GetWindowsDirectory (szDir, MAX_PATH)
TRACE ("Windows directory %s\n", szDir)
//Get the full path of the windows system directory.
鈭?: GetSystemDirectory (szDir, MAX_PATH)
TRACE ("Windows system directory %s\n", szDir)
錛?0錛?鍦ㄥ摢鍎垮垱寤轟復(fù)鏂囦歡
璋冪敤SDK鍑芥暟GetTemPath鍙互紜畾涓存椂鏂囦歡鐨勭洰褰曪紝璇ュ嚱鏁伴鍏堜負(fù)涓存椂璺緞媯(gè)嫻婽MP鐜鍙橀噺錛氬鏋滄病鏈夋寚瀹歍MP錛屾嫻婽MP鐜鍙橀噺錛岀劧鍚庤繑鍥炲埌褰撳墠鐩綍銆備笅渚嬭鏄庝簡(jiǎn)濡備綍鍒涘緩涓涓復(fù)鏃舵枃浠躲?br />
鈥?br />//get unique temporary file.
CString strFile
GetUniqueTempName (strFile)
TRY
{
//Create file and write data.Note that file is closed
//in the destructor of the CFile object.
CFile file (strFile,CFile ::modeCreate | Cfile:: modeWrite)
//write data
}
CATCH (CFileException, e)
{
//error opening file
}
END_CATCH
鈥?br />
Void GetuniqueTempName (CString& strTempName)
{
//Get the temporary files directory.
TCHAR szTempPath [MAX_PATH]
DWORD dwResult=:: GetTempPath (MAX_PATH, szTempPath)
ASSERT (dwResult)
//Create a unique temporary file.
TCHAR szTempFile [MAX_PATH]
UINT nResult=GetTempFileName (szTempPath, _T ("~ex"),0,szTempfile)
ASSERT (nResult)
strTempName=szTempFile
}
錛?1錛?鎴戞庢牱鎵嶈兘寤虹珛涓涓瓑寰呭厜鏍?
璋?鐢?BeginWaitCursor 鍑?鏁?鏉?鍚?鍔?絳?寰?鍏?鏍囷紝璋?鐢?EndWaitCursor 鍑?鏁?鏉?緇?鏉?絳?寰?鍏?鏍囥傝 娉?鎰忥紝浜?鑰?閮?瑕?璋?鐢?app 鐨?鎴?鍛?鍑?鏁幫紝濡?涓?鎵 紺?
聽聽聽聽AfxGetApp()->BeginWaitCursor();
聽聽聽聽// 瑕佸仛鐨勪簨
聽聽聽聽AfxGetApp()->EndWaitCursor();
錛?2錛?鎴戝湪MDI妗嗘灦涓湁涓?form 瑙嗙獥銆傚畠鏈変釜鍙栨秷鎸夐挳錛屾垜闇瑕佸綋鐢ㄦ埛鎸夊彇娑堟寜閽椂鍙叧闂璮orm瑙嗙獥銆傛垜搴旇濡備綍鍏抽棴璇ユ枃妗?
璋?鐢?OnCloseDocument 鍑?鏁般?/p>
錛?3錛?濡備綍璁塊棶妗岄潰紿楀彛
闈?rùn)鎬佸嚱鏁癈Wnd:: GetDesktopWindow 榪斿洖妗岄潰紿楀彛鐨勬寚閽堛備笅渚嬭鏄庝簡(jiǎn)MFC鍑芥暟CFrameWnd::BeginModalStae鏄浣曚嬌鐢ㄨ鍑芥暟榪涘叆鍐呴儴紿楀彛鍒楄〃鐨勩?br />
void CFrameWnd::BeginModalState ()
{
鈥?br />//first count all windows that need to be disabled
UINT nCount=0
HWND hWnd= :: GetWindow (:: GetDesktopWindow(), GW_CHILD)
while (hWnd!=NULL)
{
if (:: IsWindowEnabled (hwnd)
&& CWnd::FromHandlePermanent (hWnd)!=NULL
&& AfxIsDescendant (pParent->m_hWnd, hWnd)
&& :: SendMessage (hWnd, WM_DISABLEMODAL, 0, 0)==0)
{
++nCount
}
hWnd=:: GetWindow (hWnd, GW_HWNDNEXT)
}
鈥?/p>
聽
錛?6錛?鎴戝湪鎴戠殑紼嬪簭涓槸浜?jiǎn)CDWordArray銆傛垜鍚戝畠娣誨姞浜?jiǎn)绾?0,000涓暣鏁幫紝榪欎嬌寰楀畠鍙樺緱闈炲父闈炲父鎱€備負(fù)浠涔堜細(xì)榪欎箞緋?
CDWordArray 鏄?寰?濂?鐢?鐨勶紝鍙?鏄?鍥?涓?浣?娌?鏈?鎸?瀹?鏁?緇?鐨勬渶澶у昂瀵搞傚洜 姝わ紝褰?浣?娣?鍔?鏂?鍏?绱?鏃訛紝璇?綾?浼?浠?鍫?涓?閲?鏂?鍒?閰?絀?闂淬備笉 騫?鐨?鏄紝璇?綾?浼?鍦?姣?嬈?鎻?鍏?鏂?鍏?绱?鏃?閮?涓?鏁?緇?閲?鏂?鍒?閰?絀?闂淬傚 鏋?浣?鍚?瀹?娣?鍔?浜?寰?澶?鏂?鍏?绱狅紝鎵 鏈?榪?浜?鍒?閰?鍜?澶?鍒?鏁?緇?鐨?鎿?浣?浼?灝?浼?浣?瀹?鍙?鎱€傝В 鍐?璇?闂?棰?鐨?鏂?娉?鏄紝浣?鍙?浠?浣?鐢?SetSize 鍑?鏁?鐨?絎?浜?涓?鍙?鏁?鏉?鏀?鍙?榪?縐?閲?鏂?鍒?閰?鐨?棰?鐜囥備緥 濡傦紝濡?鏋?浣?鎶?璇?鍙?鏁?璁?緗?涓?500錛屽垯 姣?嬈?鏁?緇?絀?闂?瓚?鍑?鏃?瀹?鎵?閲?鏂?鍒?閰?騫?娣?鍔?500 涓?鏂?絀?闂達(dá)紝鑰?涓?鏄?1 涓傝繖 鏍?涓 鏉ワ紝浣?灝?鍙?浠?涓?鐢?閲?鏂?鍒?閰?鑰?娣?鍔?浜?鍙?澶?499 涓?鍏?绱?絀?闂達(dá)紝榪?涔?浼?澶?澶?鎻?楂?紼?搴?鐨?榪?琛?閫?搴︺?/p>
錛?7錛?鎴戣濡備綍鏀瑰彉MDI妗嗘灦紿楀彛鐨勫瓙紿楀彛鐨勫ぇ灝忎互浣垮湪紿楀彛浠ヤ竴瀹氱殑澶у皬鎵撳紑?
鍦?瑙?涓?鐨?OnInitialUpdate 鍑?鏁?涓?璋?鐢?GetParentFrame 鍑?鏁般侴etParentFrame 浼?榪?鍥?涓 鎸?鍚?涓 淇?瀛?鏈?璇?瑙?鐨?妗?鏋?紿?鍙?鐨?鎸?閽堛傜劧 鍚?璋?鐢?鍦?妗?鏋?紿?鍙?涓?璋?鐢?MoveWindow銆?/p>
錛?8錛?鍦ㄦ垜鐨勭▼搴忕殑鏌愪簺閮ㄥ垎錛屾垜鍙互璋冪敤 MessageBox 鍑芥暟鏉ュ緩绔嬩竴涓俊鎭璇濇錛屼緥濡傚湪瑙嗙被涓備絾鏄紝鍦ㄥ叾瀹冮儴鍒嗘垜鍗翠笉鑳斤紝濡傛枃妗g被涓備負(fù)浠涔堬紵鎴戞庢牱鎵嶈兘鍦ㄦ垜鐨勫簲鐢ㄧ▼搴忕被涓緩绔嬩竴涓俊鎭璇濇錛?br />MessageBox 鍑?鏁?鏉?鑷?CWnd 綾伙紝鎵 浠?浣?鍙?鑳?鍦?浠?CWnd 緇?鎵?鐨?綾?( 濡?CView ) 涓?璋?鐢?瀹冦備絾 鏄紝MFC 涔?鎻?渚?浜?AfxMessageBox 鍑?鏁幫紝浣?鍙?浠?鍦?浠?浣?鍦?鏂?璋?鐢?瀹冦?/p>
錛?9錛?鎴戦渶瑕佸湪鎴戠殑紼嬪簭涓緗叏灞鍙橀噺錛屼互浣挎枃妗d腑鐨勬墍鏈夌被閮借兘璁塊棶銆傛垜搴旇鍚у畠鏀懼埌鍝効?
鎶?璇?鍙?閲?鏀?鍒?璇?搴?鐢?紼?搴?綾?鐨?澶?鏂?浠?涓?鐨?attribute 澶勩傜劧 鍚庯紝鍦?紼?搴?鐨?浠?浣?鍦?鏂癸紝浣?閮?鍙?浠?鐢?涓?闈?鐨?鏂?娉?鏉?璁?闂?璇?鍙?閲忥細(xì)
聽聽聽聽CMyApp *app = (CMyApp *)AfxGetApp();
聽聽聽聽app->MyGlobalVariable = ...
錛?1錛?鎴戞庢牱鎵嶈兘鍦ㄦ垜鐨勫簲鐢ㄧ▼搴忎腑寰幆嫻忚宸茬粡鎵撳紑鐨勬枃妗?
浣跨敤CDocTemplate涓湭鍏紑鐨凣etFirstDocPosition()鍜孏etNextDoc()鍑芥暟銆?
錛?2錛夋墠鑳藉湪鎴戠殑搴旂敤紼嬪簭涓驚鐜祻瑙堝凡緇忔墦寮鐨勮?
浣?鐢?CDocument 涓?鏈?鍏?寮 鐨?GetFirstViewPosition() 鍜?GetNextView() 鍑?鏁般?/p>
錛?3錛夋暟PreCreateWindow鏄共浠涔堢敤鐨?
PreCreateWindow 鍏?璁?浣?鍦?璋?鐢?CreateWindow 涔?鍓?鏉?鏀?鍙?紿?鍙?灞?鎬с?/p>
錛?4錛夎鎬庢牱闃叉MFC鍦ㄧ獥鍙f爣棰樻爮涓婃妸鏂囨。鍚嶉緗垚搴旂敤紼嬪簭鍚?
鍦?PreCreateWindow 鍑?鏁?涓?鍒?闄?FWS_PREFIXTITLE 鏍?蹇?鐨?紿?鍙?鏍?寮忥細(xì)
聽聽聽聽cs.style &= ~FWS_PREFIXTITLE;
錛?5錛?鎴戝簲璇ユ庢牱闃叉MFC鍦ㄧ獥鍙f爣棰樻爮涓婃坊鍔犳枃妗e悕?
鍦?PreCreateWindow 鍑?鏁?涓?鍒?闄?FWS_ADDTOTITLE 鏍?蹇?鐨?紿?鍙?鏍?寮忥細(xì)
聽聽聽聽cs.style &= ~FWS_ADDTOTITLE ;
錛?6錛?鎴戝簲璇ュ浣曟敼鍙樿紿楀彛鐨勫ぇ灝?
鍥?涓?瑙?紿?鍙?瀹?闄?涓?鏄?妗?鏋?紿?鍙?鐨?瀛?紿?鍙o紝鎵 浠?浣?蹇?欏?鏀?鍙?妗?鏋?紿?鍙?鐨?澶?灝忥紝鑰?涓?鏄?鏀?鍙?瑙?紿?鍙c備嬌 鐢?CView 綾?涓?鐨?GetParentFrame() 鍑?鏁?鑾?寰?鎸?鍚?妗?鏋?紿?鍙?鐨?鎸?閽堬紝鐒?鍚?璋?鐢?MoveWindow() 鍑?鏁?鏉?鏀?鍙?妗?鏋?鐨?澶?灝忋傝繖 浼?浣?鍙?灝?瀵?鐨?瑙?鍏?婊?妗?鏋?紿?鍙c?/p>
錛?7錛?鎴戞湁涓鏃犳ā寮忓璇濇銆傛垜鎬庢牱鎵嶈兘鍦ㄧ獥鍙i鍑烘椂鍒犻櫎CDialog瀵硅薄?
鎶娾渄elete this鈥濆姞 鍒?PostNcDestroy 涓傝繖 涓?瑕?鐢?鍦?闇 瑕?鑷?鍔?鍒?闄?瀵?璞?鐨?鍦?鍚堛?/p>
錛?8錛?涓轟粈涔堟妸鈥渄elete this鈥濇斁鍦≒ostNcDestroy涓屼笉鏄疧nNcDestroy?
OnNcDestroy 鍙?琚?宸?寤?绔?鐨?紿?鍙?璋?鐢ㄣ傚 鏋?寤?绔?紿?鍙?澶?璐?( 濡?PreCreateWindow )錛屽垯 娌?鏈?紿?鍙?澶?鏉?鍙?閫?WM_NCDESTROY 娑?鎭侾ostNcDestroy 鏄?鍦?瀵?璞?紿?鍙?琚?瀹?鍏?鍒?闄わ紝鍦?OnNcDestroy 鍚庯紝鐢?鑷?鍦?紿?鍙?寤?绔?澶?璐?涔?鍚?璋?鐢?鐨勩?/p>
錛?9錛?File鑿滃崟涓殑MRU鍒楄〃鏄粠鍝効鏉ョ殑錛熷垪琛ㄤ腑鐨勫悕瀛楁斁鍦ㄥ摢鍎夸簡(jiǎn)錛熸垜鎬庢牱鎵嶈兘鏀瑰彉鍒楄〃涓」鐩殑鏈澶у鹼紵
鍦?搴?鐢?紼?搴?綾?鐨?InitInstance 鍑?鏁?涓?瀵?LoadStdProfileSettings 鐨?璋?鐢?涓傝 璋?鐢?鎺?鍙?涓 涓?鍙?鏁?( 鍦?緙?鐪?鎯?鍐?涓?濡?鏋?娌?鏈?浼?閫?鍊?鍒?涓?4 )銆侻RU 鏂?浠?鍚?鏄?浠?INI 鏂?浠?涓?璋?鐢?鐨勩傚 鏋?浣?鏈?甯?鏈?ID_FILE_MRU_FILE1 鐨?ID 鐨?鑿?鍗?閫?欏癸紝瀹?浼?涓?璋?鍏?鐨?MRU 鍒?琛?鎵 鏇?鎹€傚 鏋?浣?鏀?鍙?浼?閫?緇?LoadStdProfileSettings 鐨?鏁?鍊?( 鏈 澶?涓?16 )錛屽垯 浣?灝?鏀?鍙?浜?鎵 瑁?濡?鏂?浠?鍚?鐨?鏈 澶?鍊箋?/p>
錛?0錛?鎴戝湪鑿滃崟涓坊鍔犱簡(jiǎn)鏂扮殑欏廣備絾鏄紝褰撴垜閫夎欏規(guī)椂錛屽湪鐘舵佹爮涓婃病鏈夊嚭鐜頒換浣曟彁紺轟俊鎭備負(fù)浠涔?
鎵?寮 璧?婧?鏂?浠?涓?鐨?鑿?鍗?妯?鏉褲傛墦 寮 鏂?鑿?鍗?閫?欏?鐨?灞?鎬?瀵?璇?妗嗐傚湪 瀵?璇?妗?鐨?搴?閮?鐨?Prompt 緙?杈?妗?涓?錛屼綘 鍙?浠?濡?涓?鎸?瀹?鐘?鎬?鏍?涓?鐨?鎻?紺?淇?鎭?鍜?宸?鍏?鏍?涓?鐨?鎻?紺?淇?鎭?( 濡?鏋?浣?宸?緇?寤?绔?鐨?宸?鍏?鏍?鎸?閽?):
聽聽聽聽Status bar string\nFlying tag
錛?2錛?鎴戝緩绔嬩簡(jiǎn)涓涓璇濇銆備絾鏄綋鎴戞樉紺鴻瀵硅瘽妗嗘椂錛岀涓涓紪杈戞鎬繪槸涓嶈兘鑾峰緱鐒︾偣錛屾垜蹇呴』鍗曞嚮瀹冩潵浣垮畠鑾峰緱鐒︾偣銆傛垜鎬庢牱鎵嶈兘浣跨涓涓紪杈戞鍦ㄥ璇濇鎵撳紑鏃跺氨鑾峰緱鐒︾偣?
鎵?寮 璧?婧?緙?杈?鍣?涓?鐨?瀵?璇?妗?妯?鏉褲傚湪 Layout 鑿滃崟 涓?閫?鎷?Tab Order 閫?欏廣傛寜 浣?鐨?闇 姹?鍗?鍑?瀵?璇?妗?涓?鐨?鎺?鍒?鏉?閲?鏂?鎺?鍒?榪?浜?鎺?鍒?鐨?tab 欏?搴忋?/p>
錛?3錛?鎴戞庢牱鎵嶈兘浣夸竴涓獥鍙e叿鏈夆渁lways on top鈥濈壒鎬?
鍦?璋?鐢?OnFileNew 鍚庯紝鍦?浣?鐨?InitInstance 鍑?鏁?涓?鍔?涓?涓?闈?鐨?浠?鐮侊細(xì)
m_pMainWnd->SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
(94)聽聽 鎴戣涓烘垜鐨刦orm view娣誨姞鏂囨。妯℃澘銆傛垜鍏堝緩绔嬩簡(jiǎn)瀵硅瘽妗嗘ā鏉匡紝鐒跺悗浣跨敤ClassWizard寤虹珛浜?jiǎn)鍩轰簬CFormView鐨勬柊綾伙紝瀹冧篃鏄粠CDocument緇ф壙鏉ョ殑銆傛垜榪樺緩绔嬩簡(jiǎn)鐩稿簲鐨勮祫婧愬茍鍦↖nitInstance涓坊鍔犱簡(jiǎn)鏂扮殑鏂囨。妯℃澘銆備絾鏄紝褰撴垜璇曞浘榪愯璇ョ▼搴忔椂錛屽嚭鐜頒簡(jiǎn)Assertion淇℃伅銆備負(fù)浠涔?
form 鐨?瀵?璇?妗?妯?鏉?闇 瑕?浜?鐗?孌?璁?緗?浠?渚?鍙?鐢?浜?CFromView銆傜‘ 淇?榪?浜?璁?緗?鐨?鏈 綆 鍗?鏂?娉?鏄?浣?鐢?AppWizard 鏉?寤?绔?CFormView 搴?鐢?紼?搴忥紝騫?鏌?鐪?AppWizard 鎵 寤?绔?鐨?瀵?璇?妗?妯?鏉?鎵 閫?鎷?鐨凷tyles Properties銆備綘 浼?鍙?鐜?璇?瀵?璇?妗?妯?鏉?鍏?鏈?涓?鍒?鏍?寮忥細(xì)娌?鏈?鏍?棰?鏍忋佷笉 鍙?瑙?鍜屸淐hild鈥濄傛妸 浣?鐨?form view 鐨?瀵?璇?妗?灞?鎬?鍙?鎴?榪?鏍?灝?鍙?浠?浜?jiǎn)銆?br />
(95)聽聽 鎴戝湪涓瀵硅瘽妗嗕腑鏈変竴鍒楄〃妗嗭紝鎴戦渶瑕乼abbed鍒楄〃妗嗕腑鐨勯」鐩備絾鏄紝褰撴垜澶勭悊鍚湁tab瀛楃(鐢ˋddString娣誨姞鐨?鐨勫垪琛ㄩ」鏃訛紝tab琚樉紺烘垚灝忛粦鍧楄屾病鏈夊睍寮銆傚摢鍎垮嚭閿欎簡(jiǎn)?
鍦?瀵?璇?妗?妯?鐗?涓紝鎵?寮 鍒?琛?妗?鐨?灞?鎬с傜‘ 淇?閫?鎷?浜?jiǎn)鈥淯se Tabstops鈥?鏍?寮忋傜劧 鍚庯紝紜?淇?鍦?瀵?璇?妗?綾?涓?OnInitDialog 鍑?鏁?涓?璋?鐢?SetTabStops銆?br />
(96)聽聽鎴戝緩绔嬩簡(jiǎn)涓涓簲鐢ㄧ▼搴忥紝騫朵嬌鐢ㄤ簡(jiǎn)CRecordset綾匯備絾鏄紝褰撴垜榪愯璇ョ▼搴忔椂錛屽畠璇曞浘瑕佽闂暟鎹簱錛屽茍緇欏嚭鈥淚nternal Application Error鈥濆璇濇銆傛垜搴旇鎬庢牱鍋?
閫?甯?鎯?鍐?涓嬶紝褰?浣?鐨?紼?搴?涓?鍚?鏁?鎹?搴?鍙?閫?淇?鎭?鐨?SQL 璇?鍙?鍑?鐜?闂?棰?鏃?鎵?鍑?鐜?璇?瀵?璇?妗嗐備緥 濡傦紝鍙?瑙?涓?闈?鐨?渚?瀛愶細(xì)
聽聽聽聽set.m_strFilter = "(ZipCode = '27111')";
濡?鏋?ZipCode 鍒?琚?瀹?涔?涓?瀛?絎?涓?鏃?涓?浼?鍑?鐜?闂?棰橈紝濡?鏋?瀹?涔?涓?long錛屽垯 浼?鍑?鐜扳淚nternal Application Error鈥濆 璇?妗嗭紝榪?鏄?鐢?浜?綾?鍨?涓?鍖?閰?鐨?緙?鏁呫傚 鏋?浣?鍒?闄?27111 鐨?鍗?寮?鍙鳳紝鍒?涓?浼?鍑?鐜?闂?棰樸傚綋 浣?鐪?鍒扳淚nternal Application Error鈥濇椂錛屾渶 濂?媯(gè) 鏌?涓 涓?璇?鍥?瑕?鍙?閫?緇?鏁?鎹?搴?鐨?SQL 璇?鍙ャ?br />
(98)聽聽聽聽 褰撴垜鎵撳紑搴旂敤紼嬪簭涓殑紿楀彛鏃訛紝鎴戣浼犻掕紿楀彛鐨勭煩褰㈠昂瀵搞傝鐭╁艦鎸囧畾浜?jiǎn)绐楀彛鐨勫鍥村ぇ灏忓Q屼絾鏄綋鎴戣皟鐢℅etClientRect鏃訛紝鎵寰楀埌鐨勫昂瀵歌姣旀墍甯屾湜鐨勫艱灝?鍥犱負(fù)宸ュ叿鏍忓拰紿楀彛杈規(guī)鐨勭紭鏁?銆傛湁鍏跺畠鏂規(guī)硶鏉ヨ綆楃獥鍙g殑灝哄鍚?
鍙?瑙?CWnd::CalcWindowRect銆?br />
(99)聽聽 鎴戝湪鏂囨。綾諱腑璁劇疆浜?jiǎn)涓涓暣鍨嬪彉閲忋備絾鏄紝褰撴垜璇曞浘鎶婅鍙橀噺鍐欏叆Serialize鍑芥暟涓殑archive鏂囦歡涓椂錛屽嚭鐜頒簡(jiǎn)綾誨瀷閿欒銆傝屾枃妗d腑鐨勫叾瀹冨彉閲忔病鏈夐棶棰樸備負(fù)浠涔?
archive 綾?鍙?閲?杞?鏌?浜?綾?鍨?鐨?>> 鍜?<< 鎿?浣?絎︺傗渋nt鈥濈被 鍨?娌?鏈?鍦?鍏?涓紝涔?璁?鏄?鍥?涓?int 鍙?閲?鍦?Windows 3.1 涓?Windows NT/95 鏈?鎵 涓?鍚?鐨?緙?鏁?鍚с傗渓ong鈥濈被 鍨?寰?鍒?浜?鏀?鎸侊紝鎵 浠?浣?鍙?浠?鎶?int 綾?鍨?鏀?鎴?long 鍨嬨傚弬 瑙?MFC 甯?鍔?鏂?浠?涓?CArchive 綾匯?br />
(100)聽聽濡備綍鎺у埗鑿滃崟鐨勫ぇ灝?
鎴戠敤MFC鐨凜Menu鐢熸垚浜?jiǎn)涓涓姩鎬佽彍鍗?渚嬪File,Edit,View...Help), 鎴戞兂鎺у埗榪欎釜鑿滃崟鐨勫ぇ灝?闀?楂?.
鏂規(guī)硶涓:鏌ユ壘 WM_MEASUREITEM 鍜?MEASUREITEMSTRUCT.
鏂規(guī)硶浜?鏌ヨ緋葷粺::GetSystemMetric(SM_CXMENUSIZE).
聽聽聽聽 /* 浣犲彲浠ラ氳繃濡備笅浠g爜鏉ヨ幏寰楁枃鏈殑澶у皬:
聽聽聽聽聽聽聽聽(A)鑾峰緱琚嬌鐢ㄧ殑瀛椾綋 */
聽聽聽聽聽聽 NONCLIENTMETRICS ncm;
聽聽聽聽 HFONT hFontMenu;
聽聽聽聽 SIZE size;
聽聽聽聽 size.cy = size.cy = 0;
聽聽聽聽 memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
聽聽聽聽 ncm.cbSize = sizeof(NONCLIENTMETRICS);
聽聽聽聽 if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0))
聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽hFontMenu = CreateFontIndirect(&ncm.lfMenuFont);
聽聽聽聽聽聽聽聽聽聽/*
聽聽聽聽聽聽聽聽聽聽(B) 鑾峰緱鑿滃崟欏圭殑鏂囨湰: */
聽聽聽聽聽聽聽聽聽聽char szText[_MAX_PATH];
聽聽聽聽聽聽聽聽聽聽pMenu->GetMenuString(0, szText, _MAX_PATH, MF_BYPOSITION);
聽聽聽聽聽聽聽聽聽聽/*
聽聽聽聽聽聽聽聽聽聽鐒跺悗,鑾峰緱鑿滃崟欏規(guī)枃鏈殑楂樺害: */
聽聽聽聽聽聽聽聽聽聽HFONT hFontOld;
聽聽聽聽聽聽聽聽聽聽HDC hDC;
聽聽聽聽聽聽聽聽聽聽hDC = ::GetDC(NULL);
聽聽聽聽聽聽聽聽聽聽hFontOld = (HFONT) ::SelectObject(hDC, hFontMenu);
聽聽聽聽聽聽聽聽聽聽GetTextExtentPoint32(hDC, szText, lstrlen(szText), &size);
聽聽聽聽聽聽聽聽聽聽SelectObject(hDC, hFontOld);
聽聽聽聽聽聽聽聽聽聽::ReleaseDC(NULL, hDC);
聽聽聽聽 }
聽聽聽聽 /*姝ゆ椂,size.cy鍗充負(fù)楂樺害,size.cx涓哄搴?浣犲彲浠ョ粰鑿滃崟鍔犱笂鑷畾涔夌殑楂樺害鍜屽搴?閫氳繃姣旇緝,鎴戝彂鐜板搴︿負(fù)4
姣旇緝鍚堥傘?/
(101)聽聽鏀瑰彉LVIS_SELECTED鐨勭姸鎬侀鑹?
鎴戞兂灝咰ListCtrl欏瑰拰CTreeCtrl欏瑰湪LVIS_SELECTED鐘舵佹椂鐨勯鑹插彉鐏?
鏂規(guī)硶涓:鏌ユ壘鍑芥暟CustomDraw,瀹冩槸IE4鎻愪緵鐨勫叕鍏辨帶鍒?鍏佽鏈変綘鑷繁鐨勪唬鐮?
鏂規(guī)硶浜?鐢熸垚涓涓猟raw鎺т歡,鐒跺悗鍦―rawItem涓鐞嗘枃鏈鑹?
(102)聽聽 濡備綍鍙瓨鍌ㄦ枃妗g殑鏌愪竴閮ㄥ垎?
鎴戝彧鎯沖瓨鍌ㄦ枃妗g殑鏌愪竴閮ㄥ垎,鑳藉惁璞′嬌鐢ㄦ枃浠朵竴鏍蜂嬌鐢ㄦ枃妗?(涔熷氨鏄湁瀹氫綅鍑芥暟).灝嗘瘡涓狢Archive綾昏緗負(fù)CFile綾葷殑媧劇敓綾?榪欐牱浣犲氨鑳戒嬌鐢⊿eek絳夋垚鍛樺嚱鏁?
(103)聽聽 淇濆瓨宸ュ叿鏉¤彍鍗曟湁bug鍚?
浣跨敤嫻姩鑿滃崟鏉℃椂,SaveBarState鍜孡oadBarState鍑虹幇浜?jiǎn)闂?濡傛灉鑿滃崟鏄誕鍔ㄧ殑,閲嶈搗搴旂敤紼嬪簭鏃跺畠浼?xì)鍑虹幇鍦ㄥ乏涓婅?鑰屽畠鍥哄畾鍦ㄥ睆騫曞叾瀹冧綅緗椂,涓嬩竴嬈″惎鍔ㄥ氨浼?xì)鍑虹幇鍦ㄨ浣嵕|?榪欐槸浠涔堝師鍥?浣犺瘯璇曡繖涓狿ToolBar->Create(this,...,ID_MYTOOLBAR);
浣犵殑宸ュ叿鏉¢渶瑕佸寘鎷琲d,鑰屼笉鏄薄榛樿鐨勫伐鍏鋒潯閭f牱.
(104)聽聽 Tip of the day鐨刡ug
鎴戝垱寤轟簡(jiǎn)涓涓畝鍗曠殑mdi搴旂敤紼嬪簭,浣跨敤.BSF(鑷畾涔夌殑鏂囨。鎵╁睍鍚?浣滀負(fù)瀹冪殑鏂囨。鎴戜繚瀛樹竴涓猣oo.bsf鏂囨。鍚?鍙互鍦ㄨ祫婧愮鐞嗗櫒涓弻鍑昏鏂囦歡鎵撳紑mdi搴旂敤紼嬪簭鍚屾椂鎵撳紑foo.bsf鏂囨。.浣嗗綋鎴戠粰mdi搴旂敤紼嬪簭鍔犱笂a tip of the day緇勪歡涔嬪悗,浠庤祫婧愮鐞嗗櫒涓弻鍑籪oo.bsf鍚?灝變細(xì)緇欐垜涓涓鍛?ASSERT(::IsWindow(m_hWnd)),鐒跺悗mdi搴旂敤紼嬪簭灝辨閭d簡(jiǎn).
褰撲粠dde鍚姩搴旂敤紼嬪簭(渚嬪:鍙屽嚮鐩稿叧鏂囨。)鏃?"Tip of the Day"鏄湁bug鐨?浣犲彲浠ョ湅鐪嬪嚱鏁?ShowTipAtStartup",瀹冨湪"InitInstance"涓皟鐢?鍙互鐪嬪埌tip of the day浣滀負(fù)涓涓ā寮忓璇濇鏄劇ず,鍦ㄥ鐞嗗叾瀹冩秷鎭椂瀹冧竴鐩磋繘琛屾秷鎭驚鐜綘鍙績(jī)淇敼ShowTipAtStartup浣垮叾浠巇de鍚姩鏃朵笉鍑虹幇tip of the day.
void CTipOfApp::ShowTipAtStartup(void)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// CG: This function added by 'Tip of the Day' component.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CCommandLineInfo cmdInfo;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ParseCommandLine(cmdInfo);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽cmdInfo.m_bShowSplash &&
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽cmdInfo.m_nShellCommand != CCommandLineInf:FileDDE
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CTipDlg dlg;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (dlg.m_bStartup)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽dlg.DoModal();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
濡傛灉榪樻湁鍏跺畠bug,浣犲彲浠ヨ瀹歝mdInfo.m_nShellCommand鐨勮繃婊?
(105)聽聽 濡備綍鍙互璁╂垜鐨勭▼搴忓彲浠ユ樉紺哄湪鍏跺畠鐨勭獥鍙d笂闈?
璁╃敤鎴烽夋嫨"鎬繪槸鍦ㄦ渶涓婇潰"鏈濂芥槸鍦ㄧ郴緇熻彍鍗曢噷鍔犲叆涓涓夐」.鍙互閫氳繃淇敼WM_SYSCOMMAND娑堟伅鏉ュ彂閫佺敤鎴風(fēng)殑閫夋嫨.鑿滃崟鐨勫懡浠ゆ爣璇?id)浼?xì)浣滀皋Z竴涓弬鏁頒紶緇橭nSysCommand().瑕佸畾涔夋爣璇?id),灝嗗涓嬩唬鐮佸姞鍏ュ埌CMainFrame.CPP涓?
聽聽聽聽#define WM_ALWAYSONTOP WM_USER + 1
灝?鎬誨湪鏈涓婇潰"鐨勮彍鍗曢」鍔犲叆鍒扮郴緇熻彍鍗曚腑,灝嗗涓嬩唬鐮佸姞鍏ュ埌鍑芥暟CMainFrame::OnCreate()涓?
聽聽聽聽聽聽CMenu* pSysMenu = GetSystemMenu(FALSE);
聽聽聽聽聽聽pSysMenu->AppendMenu(MF_SEPARATOR);
聽聽聽聽聽聽pSysMenu->AppendMenu(MF_STRING, WM_ALWAYSONTOP,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 "&Always On Top");
浣跨敤ClassWizard,鍔犲叆瀵筗M_SYSCOMMAND娑堟伅鐨勫鐞?浣犲簲璇ユ敼鍙樻秷鎭繃婊ゅ櫒,浣跨敤緋葷粺鍙互澶勭悊榪欎釜娑堟伅.
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
聽聽聽聽switch ( nID )
聽聽聽聽{
聽聽聽聽case WM_ALWAYSONTOP:
聽聽聽聽聽聽聽聽if ( GetExStyle() & WS_EX_TOPMOST )
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽SetWindowPos(&wndNoTopMost, 0, 0, 0, 0,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SWP_NOSIZE | SWP_NOMOVE);
聽聽聽聽聽聽聽聽聽聽聽聽GetSystemMenu(FALSE)->CheckMenuItem(WM_ALWAYSONTOP,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽MF_UNCHECKED);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽SetWindowPos(&wndTopMost, 0, 0, 0, 0,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SWP_NOSIZE | SWP_NOMOVE);
聽聽聽聽聽聽聽聽聽聽聽聽GetSystemMenu(FALSE)->CheckMenuItem(WM_ALWAYSONTOP,MF_CHECKED);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽break;
聽聽聽聽default:
聽聽聽聽聽聽聽聽CFrameWnd::OnSysCommand(nID, lParam);
聽聽聽聽}
}
(106)聽聽聽聽濡備綍鎺у埗紿楀彛妗嗘灦鐨勬渶澶ф渶灝忓昂瀵?
瑕佹帶鍒朵竴涓鏋剁殑鐨勬渶澶ф渶灝忓昂瀵?浣犻渶瑕佸仛涓や歡浜嬫儏.鍦–FrameWnd鐨勭戶鎵跨被涓鐞嗘秷鎭疻M_GETMINMAXINFO,緇撴瀯MINMAXINFO璁劇疆浜?jiǎn)鏁翠釜绐楀彛绫荤殑闄愬?鍥犳璁頒綇瑕佽冭檻宸ュ叿鏉?鍗峰姩鏉$瓑絳夌殑澶у皬.
// 鏈澶ф渶灝忓昂瀵哥殑璞$礌鐐?- 紺轟緥
#define MINX 200
#define MINY 300
#define MAXX 300
#define MAXY 400
void CMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
聽聽聽聽CRect rectWindow;
聽聽聽聽GetWindowRect(&rectWindow);
聽聽聽聽CRect rectClient;
聽聽聽聽GetClientRect(&rectClient);
聽聽聽聽聽聽// get offset of toolbars, scrollbars, etc.
聽聽聽聽int nWidthOffset = rectWindow.Width() - rectClient.Width();
聽聽聽聽int nHeightOffset = rectWindow.Height() - rectClient.Height();
聽聽聽聽lpMMI->ptMinTrackSize.x = MINX + nWidthOffset;
聽聽聽聽lpMMI->ptMinTrackSize.y = MINY + nHeightOffset;
聽聽聽聽lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset;
聽聽聽聽lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset;
}
絎簩姝?鍦–FrameWnd鐨勭戶鎵跨被鐨凱reCreateWindow鍑芥暟涓幓鎺塛S_MAXIMIZEBOX娑堟伅,鍚﹀垯鍦ㄦ渶澶у寲鏃朵綘灝嗗緱涓嶅埌棰勬枡鐨勭粨鏋?
BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
聽聽聽聽cs.style &= ~WS_MAXIMIZEBOX;
聽聽聽聽return CFrameWnd::PreCreateWindow(cs);
}
(107)聽聽聽聽濡備綍鏀瑰彉紿楀彛妗嗘灦鐨勯鑹?
MDI妗嗘灦鐨勫鎴峰尯琚彟涓涓獥鍙g殑妗嗘灦鎵瑕嗙洊.涓轟簡(jiǎn)鏀瑰彉瀹㈡埛鍖虹殑鑳屾櫙鑹?浣犻渶瑕侀噸鐢昏繖涓鎴風(fēng)獥鍙?涓轟簡(jiǎn)鍋氬埌榪欑偣,浣犺澶勭悊娑堟伅WM_ERASEBKND浜х敓涓涓柊綾?浠嶤Wnd緇ф壙,濮戜笖縐頒箣涓篊MDIClient.緇欏畠鍔犱笂涓涓垚鍛樺彉閲?
#include "MDIClient.h"
class CMainFrame : public CMDIFrameWnd
{
...
protected:
CMDIClient m_wndMDIClient;
}
鍦–MainFrame涓噸杞紺MDIFrameWnd::OnCreateClient
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
聽聽聽聽if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
聽聽聽聽{
聽聽聽聽聽聽聽聽m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
聽聽聽聽聽聽聽聽return TRUE;
聽聽聽聽}
聽聽聽聽else
聽聽聽聽聽聽聽聽return FALSE;
}
鐒跺悗灝卞彲浠ュ姞鍏ュ娑堟伅WM_ERASEBKGND鐨勫鐞嗕簡(jiǎn).
(108)聽聽聽聽濡備綍灝嗗簲鐢ㄧ▼搴忕獥鍙g疆浜庡睆騫曟涓?
瑕佸皢浣犵殑搴旂敤紼嬪簭紿楀彛鏀劇疆鍦ㄥ睆騫曟涓ぎ,鍙』鍦∕ainFrame鐨凮nCreate鍑芥暟涓姞鍏?
CenterWindow( GetDesktopWindow() );


