visual c++ 技术资料(网络收集)
1.如何獲取應用程序的 實例句柄?
應用程序的實例句柄保存在CWinApp m_hInstance 中,可以這么調用AfxGetInstancdHandle獲得句柄.
Example: HANDLE hInstance=AfxGetInstanceHandle()
2.如何通過代碼獲得應用程序主窗口的 指針?
主窗口的 指針保存在CWinThread::m_pMainWnd中,調用AfxGetMainWnd實現。
?AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED)
//使程序最大化.
3.如何在程序中獲得其他程序的 圖標?
兩種方法:
?(1) SDK函數 SHGetFileInfo 或使用 ExtractIcon獲得圖標資源的 handle,
?(2) SDK函數 SHGetFileInfo 獲得有關文件的很多信息,如大小圖標,屬性, 類型等.
?Example(1):
在程序窗口左上角顯示 NotePad圖標.
?void CSampleView:
OnDraw(CDC * pDC)
{
if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,
&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))
{
pDC ->DrawIcon(10,10,stFileInfo.hIcon)
}
}
Example(2):同樣功能,Use ExtractIcon Function
void CSampleView:: OnDraw(CDC *pDC)
{
HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T
("NotePad.exe"),0)
if (hIcon &&hIcon!=(HICON)-1)
pDC->DrawIcon(10,10,hIcon)
4.如何編程結束應用程序?
向窗口發送 WM_CLOSE消息,調用 CWnd::OnClose成員函數.允許對用戶提示是否保存修改過的數據.
?Example: AfxGetMainWindow()->SendMessage(WM_CLOSE)
還可以創建一個自定義的函數 Terminate Window
?void Terminate Window(LPCSTR pCaption)
?{
?CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption)
if (pWnd)
pWnd ->SendMessage(WM_CLOSE)
?}
5.如何自定義消息
(1) 手工定義消息,可以這么寫
#define WM_MY_MESSAGE(WM_USER+100),
MS 推薦的至少是 WM_USER+100
?(2)寫消息處理函數,用
WPARAM,LPARAM返回LRESULT.
LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam)
{
?temp目錄: Use "GetTempPath"
//加入你的處理函數 irectory"
}
6.如何改變窗口的圖標?
向窗口發送 WM_SECTION消息。
?Example:
?HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON)
?ASSERT(hIcon)
?AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM)hIcon)
7.如何改變窗口的缺省風格?
重載 CWnd:: PreCreateWindow 并修改CREATESTRUCT結構來指定窗口風格和其他創建信息.
?Example: Delete "Max" Button and Set Original
Window's Position and Size
?BOOL CMainFrame:: PreCreateWindow
(CREATESTRUCT &cs)
?{
?cs.style &=~WS_MAXINIZEMOX
?cs.x=cs.y=0
?cs.cx=GetSystemMetrics(SM_CXSCREEN/2)
?cs.cy=GetSystemMetrics(SM_CYSCREEN/2)
?return CMDIFramewnd ::PreCreateWindow(cs)
?}
8.如何改變視窗的背景顏色
Windows向窗口發送一個WM_ERASEBKGND消息通知該窗口擦除背景,可以使用ClassWizard重載該消息的缺省處理程序來擦除背景(實際是畫),并返回TRUE以防止Windows擦除窗口。
//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—>SelcetObject (&brush)
// Get the area that needs to be erased .
CRect reClip
pDC—>GetCilpBox (&rcClip)
//Paint the area.
pDC—> PatBlt (rcClip.left , rcClip.top , rcClip.Width ( ) , rcClip.Height( ) , PATCOPY )
//Unselect brush out of device context .
pDC—>SelectObject (pOldBrush )
// Return nonzero to half fruther processing .
return TRUE
}
9.如何改變窗口標題
調用CWnd : : SetWindowText可以改變任何窗口(包括控件)的標題。
//Set title for application's main frame window .
AfxGetMainWnd ( ) —> SetWindowText (_T("Application title") )
//Set title for View's MDI child frame window .
GetParentFrame ( ) —> SetWindowText ("_T ("MDI Child Frame new title")
)
//Set title for dialog's push button control.
GetDigitem (IDC_BUTTON) —> SetWindowText (_T ("Button new title ") )
如果需要經常修改窗口的標題(注:控件也是窗口),應該考慮使用半文檔化的函數AfxSetWindowText。該函數在AFXPRIV.H中說明,在WINUTIL.CPP中實現,在聯機幫助中找不到它,它在AFXPRIV.H中半文檔化, 在以后發行的MFC中將文檔化。
AfxSetWindowText的實現如下:
voik AFXAPI AfxSetWindowText (HWND hWndCtrl , LPCTSTR IpszNew )
{
?itn nNewLen= Istrlen (Ipaznew)
?TCHAR szOld [256]
?//fast check to see if text really changes (reduces
flash in the
controls )
?if (nNewLen >_contof (szOld)
|| : : GetWindowText (hWndCrtl, szOld , _countof (szOld) !=nNewLen
|| Istrcmp (szOld , IpszNew)! = 0
{
?//change it
?: : SetWindowText(hWndCtrl , IpszNew )
?}
}
10.如何改變控件的字體
由于控件是也是窗口,用戶可以調用CWnd: : SetFont指定新字體。該函數用一個Cfont指針,要保證在控件撤消之前不能撤消字體對象。下例將下壓按鈕的字體改為8點Arial字體:
//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 ( )
{
?…
?//Create an 8-point Arial font
?m_font . CreateFont (MulDiv (8 , -pDC
—> GetDeviceCaps(LOGPIXELSY) ,72). 0 , 0 , 0 , FW_NORMAL , 0 , 0,0, ANSI_CHARSER, OUT_STROKE_PRECIS ,
?CLIP_STROKE _PRECIS , DRAFT _QUALITY
?VARIABLE_PITCH |FF_SWISS, _T("Arial") )
?//Set font for push button .
?m_wndButton . SetFont (&m _font )
?…
}
轉載于:https://www.cnblogs.com/chenfanwen/archive/2006/11/23/570226.html
總結
以上是生活随笔為你收集整理的visual c++ 技术资料(网络收集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OJ1019: 公园门票
- 下一篇: OJ1070: 小汽车的位置(C语言)