锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久噜噜噜久噜久久,国产情侣一区,久久综合网络一区二区http://m.shnenglu.com/microli/articles/13664.html閾佽闊?/dc:creator>閾佽闊?/author>Sat, 14 Oct 2006 02:44:00 GMThttp://m.shnenglu.com/microli/articles/13664.htmlIntroduction

The ZSplitterDlg and ZSplitter classes help you to add splitters to your dialog, property sheet or any other window. It splits your controls and makes them movable and resizeable. I think this way is better than "auto size" contol: it adds a "docking" opportunity. Moreover, one more control added that add "auto size" option. Finally, you can integrate the ZSplitterDlg with a resizable dialog (for example CResizableDialog by Paolo Messina).

Note that you shouldn't add anything to your resources and shouldn't describe the relations between controls. Just make the corresponding size and position of your controls and use the functions:

				void addControls(int count, bool connectVertical, ...);
void addControl(int id);

Demo project shows using these automatically added controls in CDialog, CPropertyPage, CView and CFormView classes.

Sample Image

Using the class

The simplest way is to use the ZSplitterDlgImpl template. You should change:

  • The parent of your dialog ot view class,
  • the constructor implementation,
  • the second parameter in BEGIN_MESSAGE_MAP macros, and
  • the "on init" function of your window.
				// in header
				class CTestDlg1 : public ZSplitterDlgImpl<CPropertyPage>

// in source
CTestDlg1::CTestDlg1() : /*...*/ ZSplitterDlgImpl<CPropertyPage>(CTestDlg1::IDD) {}

BEGIN_MESSAGE_MAP(CTestDlg1, ZSplitterDlgImpl<CPropertyPage>)
	//	...
END_MESSAGE_MAP()

BOOL CTestDlg1::OnInitDialog() 
{
	// ... and use addControl(s) function here
	init();
	// ...
}

The ZSplitterDlgImpl template has a second parameter (ZSplitter2 by default). ZSplitter2 is the implementation of a spliter control. It has a virtual function OnPaint() - and you can change it's realisation to have different view of your control (see CMyView1 class in demo project).

The ZSplitterDlgImpl template helps you to implement splitter controls but you can use its base ZSplitterDlg class (look for CTestDlg2 class) in demo project.

I remade a little CResizableDialog with the permission of the author and you can use it with my splitters: use the ZSplitterDlgResizable class for this job. (look for CDemoDlg class) in the demo project.

resizable sample

This is a sample of your dialog in resource editor:

in vc++ editor

And user can change it in such way in runtime.

after user manipulations

You should use the addControls or addControl functions to add one control to the "splitter set" or a group of controls: they will move together. This is an example which you seen above

  addControls(2,false,IDC_LIST6,IDC_LIST7);
  addControls(2,true,IDC_LIST1,IDC_LIST8);
  addControl(IDC_LIST9);
  addControl(IDC_LIST2);
  addControl(IDC_LIST3);
  addControl(IDC_LIST4);
  addControl(IDC_LIST5);

Moreover you can manually add a ZSplitter class (the most common splitter controls) to a page. Look at the images and in the CTestDlg3 class of the demo project for details.

before moving after moving

To Do list

I'd like to make the look (color, size, effects) of the splitter more presentable. So I want to get comments from you. First of all: is this technique useful to you?

Note

Make sure to check out the my web site which is more likely to have updates and betas:
http://www.zmike.net

About Mike Melnikov


Mike has been programming in C/C++ for 11 years and Visual C++/MFC for 4 years. His background includes pure and applied mathematics, engineering and physics, and he is currently based in Moscow, Russia.

Click here to view Mike Melnikov's online profile.



]]>
CSplitterWnd in a Dialog based Applicationhttp://m.shnenglu.com/microli/articles/13663.html閾佽闊?/dc:creator>閾佽闊?/author>Sat, 14 Oct 2006 02:42:00 GMThttp://m.shnenglu.com/microli/articles/13663.html

Had this problem before. I guess there are some more interested in a solution.

It seems CSplitterWnd is designed to be used in document/view-based applications only.
But by overriding some virtual methods in a derived class, you can make splitter windows based on CSplitterWnd be used in dialog based application, ActiveX-Controls using MFC:

All virtual methods that call GetParentFrame() in its implementation have to be overridden.
I have done this by using existing code except
- that I replaced the call to GetParentFrame() by a call to GetParent().
- all references or pointers to CFrameWnd were changed to references or pointers to CWnd.

I derived a class CxSplitterWnd from the class CSplitterWnd and proceeded as stated above.
Then I used this class in a dialog based application in the same way as any other CWnd derived class.
For example:

class CSampleDialog : public CDialog
{
	...
	CxSplitterWnd m_wndSplitter;
	....
}

BOOL CSampleDlg::OnInitDialog()
{
...
	// TODO: Add extra initialization here
	m_wndSplitter.CreateStatic(this, 1, 2);
	m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSampleView), CSize(50,0), NULL);
	m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CSampleView), CSize(0,0), NULL);

	CRect rect = ...;
	m_wndSplitter.MoveWindow(&rect);
	...
}

The sample attached is a dialog based application and demonstrates the use of CxSplitterWnd. It does
nothing useful.

This is the new class declaration:

// SplitWnd.h : implementation file// class CxSplitterWnd : public CSplitterWnd
{
	// Constructionpublic:
	CxSplitterWnd() {};
	virtual ~CxSplitterWnd() {};

	// Operationspublic:
	// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CxSplitterWnd)//}}AFX_VIRTUAL // Implementationpublic:
	// These are the methods to be overriddenvirtualvoid StartTracking(int ht);
	virtual CWnd* GetActivePane(int* pRow = NULL, int* pCol = NULL);
	virtualvoid SetActivePane( int row, int col, CWnd* pWnd = NULL );
	virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
	virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
	virtual BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult );

	// Generated message map functionsprotected:
	//{{AFX_MSG(CxSplitterWnd)// NOTE - the ClassWizard will add and remove member functions here.//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

And here the implementation file:
// SplitWnd.cpp : implementation file// #include "stdafx.h"
#include "SplitWnd.h"

#ifdef _DEBUG
#definenew DEBUG_NEW
#undef THIS_FILE
staticchar THIS_FILE[] = __FILE__;
#endif

// HitTest return values (values and spacing between values is important)// Had to adopt this because it has module scope enum HitTestValue
{
	noHit = 0,
	vSplitterBox = 1,
	hSplitterBox = 2,
	bothSplitterBox = 3, // just for keyboard
	vSplitterBar1 = 101,
	vSplitterBar15 = 115,
	hSplitterBar1 = 201,
	hSplitterBar15 = 215,
	splitterIntersection1 = 301,
	splitterIntersection225 = 525
};

/////////////////////////////////////////////////////////////////////////////// CxSplitterWnd 

BEGIN_MESSAGE_MAP(CxSplitterWnd, CSplitterWnd)
//{{AFX_MSG_MAP(CxSplitterWnd)// NOTE - the ClassWizard will add and remove mapping macros here.//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CWnd* CxSplitterWnd::GetActivePane(int* pRow, int* pCol)
{
	ASSERT_VALID(this);
	CWnd* pView = GetFocus();
	// make sure the pane is a child pane of the splitterif (pView != NULL && !IsChildPane(pView, pRow, pCol))
	pView = NULL;
	return pView;
}

void CxSplitterWnd::SetActivePane( int row, int col, CWnd* pWnd)
{
	// set the focus to the pane
	CWnd* pPane = pWnd == NULL ? GetPane(row, col) : pWnd;
	pPane->SetFocus();
}

void CxSplitterWnd::StartTracking(int ht)
{
ASSERT_VALID(this);
	if (ht == noHit)
		return;
	// GetHitRect will restrict 'm_rectLimit' as appropriate
	GetInsideRect(m_rectLimit);
	if (ht >= splitterIntersection1 && ht <= splitterIntersection225)
	{
		// split two directions (two tracking rectangles)int row = (ht - splitterIntersection1) / 15;
		int col = (ht - splitterIntersection1) % 15;
		GetHitRect(row + vSplitterBar1, m_rectTracker);
		int yTrackOffset = m_ptTrackOffset.y;
		m_bTracking2 = TRUE;
		GetHitRect(col + hSplitterBar1, m_rectTracker2);
		m_ptTrackOffset.y = yTrackOffset;
	}
	elseif (ht == bothSplitterBox)
	{
		// hit on splitter boxes (for keyboard)
		GetHitRect(vSplitterBox, m_rectTracker);
		int yTrackOffset = m_ptTrackOffset.y;
		m_bTracking2 = TRUE;
		GetHitRect(hSplitterBox, m_rectTracker2);
		m_ptTrackOffset.y = yTrackOffset;
		// center it
		m_rectTracker.OffsetRect(0, m_rectLimit.Height()/2);
		m_rectTracker2.OffsetRect(m_rectLimit.Width()/2, 0);
	}
	else
	{
		// only hit one bar
		GetHitRect(ht, m_rectTracker);
	}

	// steal focus and capture
	SetCapture();
	SetFocus();
	// make sure no updates are pending
	RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_UPDATENOW);
	// set tracking state and appropriate cursor
	m_bTracking = TRUE;
	OnInvertTracker(m_rectTracker);
	if (m_bTracking2)
	OnInvertTracker(m_rectTracker2);
	m_htTrack = ht;
	SetSplitCursor(ht);
}

/////////////////////////////////////////////////////////////////////////////// CSplitterWnd command routing 
BOOL CxSplitterWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
	if (CWnd::OnCommand(wParam, lParam))
	return TRUE;
	// route commands to the splitter to the parent frame windowreturn GetParent()->SendMessage(WM_COMMAND, wParam, lParam);
}

BOOL CxSplitterWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult )
{
	if (CWnd::OnNotify(wParam, lParam, pResult))
	return TRUE;
	// route commands to the splitter to the parent frame window
	*pResult = GetParent()->SendMessage(WM_NOTIFY, wParam, lParam);
	return TRUE;
}

BOOL CxSplitterWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
	// The code line below is necessary ifusing CxSplitterWnd in a regular dll// AFX_MANAGE_STATE(AfxGetStaticModuleState()); return CWnd::OnWndMsg(message, wParam, lParam, pResult);
}


]]>
VC璁捐鍒嗗壊瑙嗗浘閫氱敤鍒涘緩妗嗘灦http://m.shnenglu.com/microli/articles/11914.html閾佽闊?/dc:creator>閾佽闊?/author>Fri, 01 Sep 2006 02:08:00 GMThttp://m.shnenglu.com/microli/articles/11914.html綆 浠嬨?br />銆銆鐩墠鍩轟簬鍒嗗壊瑙嗗浘鐨勫簲鐢ㄥ紑鍙戝崄鍒嗘祦琛岋紝鍒嗗壊瑙嗗浘鎶鏈槸鍦ㄥ悓涓涓鏋剁獥鍙d笅鍚屾椂鏄劇ず澶氫釜瑙嗗浘鐨勪竴欏規妧鏈傝繍鐢ㄥ垎鍓茶鍥撅紝鍙互鍦ㄨ緝鐭椂闂村唴緇欑敤鎴鋒洿澶氱殑淇℃伅閲忥紝浠庤屼嬌寰楃敤鎴風晫闈㈡洿鍔犵殑鍙嬪ソ錛屽寮轟簡杞歡鐨勫彲鎿嶄綔鎬с傛湰鏂囨彁鍑轟竴涓垎鍓茶鍥劇殑閫氱敤鍒涘緩妗嗘灦銆?

鐩墠鍩轟簬鍒嗗壊瑙嗗浘鐨勫簲鐢ㄥ紑鍙戝崄鍒嗘祦琛岋紝鍒嗗壊瑙嗗浘鎶鏈槸鍦ㄥ悓涓涓鏋剁獥鍙d笅鍚屾椂鏄劇ず澶氫釜瑙嗗浘鐨勪竴欏規妧鏈傝繍鐢ㄥ垎鍓茶鍥撅紝鍙互鍦ㄨ緝鐭椂闂村唴緇欑敤鎴鋒洿澶氱殑淇℃伅閲忥紝浠庤屼嬌寰楃敤鎴風晫闈㈡洿鍔犵殑鍙嬪ソ錛屽寮轟簡杞歡鐨勫彲鎿嶄綔鎬с傛湰鏂囨彁鍑轟竴涓垎鍓茶鍥劇殑閫氱敤鍒涘緩妗嗘灦銆傘銆

銆銆1錛庡垎鍓茶鍥懼垱寤烘鏋?

銆銆鍒嗗壊瑙嗗浘鐨勫垱寤哄ぇ浣撲笂鍒嗕負涓や釜姝ラ錛氬叾涓鏄垱寤哄垎鍓茬獥浣擄紱鐒跺悗灝辨槸澶勭悊榧犳爣鍜岄敭鐩樼瓑娑堟伅銆?

銆銆1) 鍒涘緩鍒嗗壊紿椾綋

銆銆MFC鎻愪緵鍒嗗壊紿椾綋綾籆splitterWnd錛屽畠鎻愪緵浜嗗緢澶氬浜庡垎鍓茬獥浣撴搷浣滅殑鎴愬憳鍑芥暟錛屾瘡涓涓垎鍓茬獥浣撻兘鏄竴涓狢splitterWnd鐨勫璞°傛湰鏂囨彁鍑虹殑妗嗘灦鐢變簬闇瑕佸瀹氬埗鐨勫垎鍓茬獥浣撹繘琛屾墿鍏呭鐞嗭紝鎵浠ラ鍏堜粠CsplitterWnd緇ф壙涓涓瓙綾籆FixSplitterWnd錛岀劧鍚庢瘡涓垎鍓茬獥浣撴槸涓涓狢fixSplitterWnd鐨勫璞★紝榪欐牱浠ュ悗鍙渶瑕佸CfixSplitterWnd榪涜鏀瑰啓鍚庡氨鍙互澧炲己鍒嗗壊紿椾綋鐨勫姛鑳姐傦紙鍚庨潰灝嗘彁鍑鴻繖縐嶆敼鍐欙級

銆銆鍒涘緩鍒嗗壊紿椾綋鏈閲嶈鐨勫嚱鏁版槸涓繪鏋剁被鐨凮nCreateClient鍑芥暟錛屽畠灝嗗湪涓繪鏋跺垱寤虹殑鏃跺欒皟鐢紝鏈枃灝嗗垱寤轟竴涓涓嬫樉紺虹殑鍒嗗壊紿椾綋錛?

VC璁捐鍒嗗壊瑙嗗浘閫氱敤鍒涘緩妗嗘灦
銆銆

銆銆鍒欏彲浠ュ涓嬪疄鐜幫細銆銆

銆銆//鎴愬憳鍙橀噺澹版槑

銆銆CFixSplitterWnd m_wndSplitterH; //鐢ㄤ簬妯悜鍒囧壊

銆銆CFixSplitterWnd m_wndSplitterV; //鐢ㄤ簬綰靛悜鍒囧壊

銆銆BOOL m_bCreateSplitter;銆銆

銆銆//鍒嗗壊紿椾綋鐨勫疄鐜?

銆銆BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

銆銆{

銆銆//瀵規暣涓富妗嗘灦榪涜娣峰悎鍒嗗壊瑙嗗浘

銆銆BOOL bResult=m_wndSplitterV.CreateStatic(this,1,2);

銆銆ASSERT(bResult);

銆銆m_wndSplitterH.CreateStatic(&m_wndSplitterV,4,1,WS_CHILD 銆 WS_VISIBLE,m_wndSplitterV.IdFromRowCol(0,1));

//鍒涘緩鍚勮嚜瀛愮獥鐗囩殑瀵瑰簲鐨勮鍥?

銆銆m_wndSplitterV.CreateView(0,0,RUNTIME_CLASS(CSceneView),CSize(600,600),pContext);

銆銆m_wndSplitterH.CreateView(0,0,RUNTIME_CLASS(CPitchView),CSize(100,100),pContext);

銆銆m_wndSplitterH.CreateView(1,0,RUNTIME_CLASS(CYawView),CSize(100,100),pContext);

銆銆m_wndSplitterH.CreateView(2,0,RUNTIME_CLASS(CRollView),CSize(100,100),pContext);

銆銆m_wndSplitterH.CreateView(3,0,RUNTIME_CLASS(CControlView),CSize(100,100),pContext);

銆銆//璁劇疆紿楁牸鐨勫垵濮嬪寲鐨勫ぇ灝?

銆銆m_wndSplitterV.SetRowInfo(0,IDEAL_RAWHEIGHT,0);

銆銆m_bCreateSplitter=TRUE;

銆銆//嬋媧籹ceneview浣垮緱鍏跺彲浠ユ帴鍙楀懡浠ゆ秷鎭?

銆銆m_wndSplitterV.SetActivePane(0,0,NULL);

銆銆return bResult;

銆銆}

銆銆//涓繪鏋剁獥浣撳ぇ灝忓彂鐢熷彉鍖栵紝璋冭妭鐩稿簲鐨勭獥浣撳ぇ灝?

銆銆void CMainFrame::OnSize(UINT nType, int cx, int cy)

銆銆{

銆銆CMDIFrameWnd::OnSize(nType, cx, cy);

銆銆CRect rect;

銆銆GetClientRect(rect);

銆銆if (m_bCreateSplitter)聽
聽聽聽聽聽聽{

銆銆m_wndSplitterV.SetColumnInfo(0,rect.Width() *3/4,10);

銆銆m_wndSplitterV.SetColumnInfo(1,rect.Width() *1/4,10);

銆銆m_wndSplitterH.SetRowInfo(0,rect.Height() /6,10);

銆銆m_wndSplitterH.SetRowInfo(1,rect.Height() /6,10);

銆銆m_wndSplitterH.SetRowInfo(2,rect.Height() /6,10);

銆銆m_wndSplitterH.SetRowInfo(3,rect.Height()/2,10);

銆銆}

銆銆m_wndSplitterV.RecalcLayout();

銆銆m_wndSplitterH.RecalcLayout();

銆銆}

銆銆娉ㄦ剰m_wndSplitterH.CreateView 涓殑絎簩涓弬鏁幫紝榪欎釜鍙傛暟灝嗗垎鍓茬獥浣撳拰鐩稿簲鐨勮鍥劇被鐩稿搴斻?

銆銆閫氳繃涓婅堪鐨勭▼搴忎唬鐮佸嵆鍙垱寤哄浘1鎵紺虹殑鍒嗗壊紿椾綋錛岄偅涔堢敱浜庤繖閲屾瘡涓垎鍓茬獥浣撻兘鏄竴涓狢fixSplitterWnd瀵硅薄錛屾墍浠ュ彲浠ラ氳繃鏀瑰啓CfixSplitterWnd綾葷殑铏氬嚱鏁版垨娑堟伅澶勭悊鍑芥暟鏉ュ畬鎴愯嚜宸辯壒瀹氱殑搴旂敤瀹炵幇銆傦紙娉ㄦ剰錛屽鏋滈渶瑕佸瀹氬埗鏈夌壒瀹氬睘鎬х殑鍒嗗壊紿椾綋錛屼竴瀹氳媧劇敓鑷繁鐨勫垎鍓茬獥浣撶被鑰屼笉鑳芥槸MFC鐨凜splitterWnd綾伙級榪欓噷鎴戜滑闇瑕佸垎鍓茬獥浣撲笉鑳介殢榧犳爣鎷栧姩鑰屾敼鍙樺叾澶у皬錛屽嵆鎵鏈夌獥鏍肩殑澶у皬閮芥槸涓瀹氱殑錛屼笉鑳藉湪榪愯鏃跺埢鏀瑰彉銆傛墍浠ュ繀欏誨湪CfixSplitterWnd綾葷殑瀹炵幇涓姞鍏ュ涓嬩唬鐮侊細銆銆

銆銆void CFixSplitterWnd::OnMouseMove(UINT nFlags, CPoint point)

銆銆{

銆銆CWnd::OnMouseMove(nFlags, point); //闃叉榧犳爣鍑虹幇鎷栧姩鐘?

銆銆// CSplitterWnd::OnMouseMove(nFlags, point); //榧犳爣浼氬湪紿椾綋杈圭晫鍑虹幇鎷栧姩鐘?

銆銆}

銆銆鑷蟲錛屽垎鍓茬獥浣撳凡緇忓垱寤哄畬姣曪紝涓嬮潰闇瑕佸湪鍒嗗壊紿椾綋閲屽鐞嗘秷鎭?

銆銆2) 鍒嗗壊紿椾綋澶勭悊娑堟伅

銆銆鍦ㄥ垎鍓茬獥浣撻噷澶勭悊娑堟伅鍜屼竴鑸殑鏂囨。瑙嗗浘妯″瀷澶勭悊娑堟伅澶ц嚧涓鏍鳳紝浣嗗畠涔熸湁鍏剁壒孌婁箣澶勩傚叿浣撴潵璇?鐢變簬鍚勪釜鍒嗗壊紿椾綋宸茬粡涓庡叿浣撶殑瑙嗗浘綾葷浉鑱旂郴浜嗭紝鎵浠ュ湪闇瑕佸鐞嗗悇涓垎鍓茬獥浣撲腑鐨勬秷鎭椂錛屽彲浠ョ洿鎺ュ埌鐩稿簲鐨勮鍥劇被涓繘琛屽鐞嗭紱鍙﹀錛屽瑙嗗浘涔嬮棿鐨勫垏鎹細瀵艱嚧鐩爣鐒︾偣涔嬮棿鐨勫彉鏇達紝榪欐牱浼氬獎鍝嶈彍鍗曚腑涓庤鍥炬湁鍏崇殑鍛戒護鐨勬墽琛屻傛瘮濡傚湪鍥?涓墍紺虹殑鍒嗗壊紿椾綋涓紝鏈変竴涓滃紑濮嬧濆懡浠ゅ繀欏繪槸鐒︾偣鍦–sceneView瑙嗗浘涓婃椂鎵嶈兘鎵ц錛屽惁鍒欏氨搴旇璁╄鍛戒護涓嶈兘鎵ц錛堝嵆璇ヨ彍鍗曞憟鐜扮伆鑹詫級錛屽垯瀹炵幇鏃跺彲浠ラ鍏堝榧犳爣榪涜鐐瑰嚮嫻嬭瘯錛屽垽鏂槸鍚﹀湪CsceneView瑙嗗浘鑼冨洿鍐咃紝濡傛灉鏄殑璇濆氨鍏佽鎵ц錛屽惁鍒欏氨涓嶅厑璁告墽琛屻?

銆銆2錛庣粨璁?

銆銆閫氳繃鏈枃鎻愬嚭鐨勫垎鍓茶鍥懼垱寤烘鏋訛紝鍙互婊¤凍瀵硅鍥捐繘琛屽鏉傛帶鍒剁殑闇姹傦紝甯屾湜鏈枃鍙互緇欏ぇ瀹朵竴涓惎鍙戯紝浠庤岃兘澶熷垱寤烘洿涓哄畬緹庣殑鍒嗗壊瑙嗗浘搴旂敤紼嬪簭銆?a >


]]>
浣跨敤VC6.0瀹炵幇紿楀彛鐨勪換鎰忓垎鍓?/title><link>http://m.shnenglu.com/microli/articles/11913.html</link><dc:creator>閾佽闊?/dc:creator><author>閾佽闊?/author><pubDate>Fri, 01 Sep 2006 01:56:00 GMT</pubDate><guid>http://m.shnenglu.com/microli/articles/11913.html</guid><description><![CDATA[ <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td width="40" height="74"> </td> <td valign="top" width="*" height="74"> <form name="form2" action="/SYS/script/find.asp" method="post"> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <span id="docinfo">[ <font color="#009900">鍘熷垱鏂囨。</font> 鏈枃閫傚悎涓駭璇昏?宸查槄璇籲嬈?]</span> </td> <td align="right"> <input class="rect" maxlength="20" size="10" name="keyword" /> <select class="rect" name="gclsid"> <option value="100" selected="">鏂囨。</option> <option value="200">浠g爜</option> <option value="400">宸ュ叿</option> </select> <input type="image" height="15" width="21" src="http://www.vckbase.com/document/image/go.gif" align="absMiddle" border="0" name="imageField" /> </td> </tr> </tbody> </table> </form> <p align="center"> <span id="hvzpftn" class="big"> <b> <font color="#006633">浣跨敤VC6.0瀹炵幇紿楀彛鐨勪換鎰忓垎鍓?/font> <br /> </b>鍗椾含閭斂灞璁$畻鏈轟腑蹇?寮犱腑搴?/span> </p> <div align="center"> <table class="big" height="46" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <p> <b>涓銆佸叧浜嶤SplitterWnd綾?/b> <br />鎴戜滑鍦ㄤ嬌鐢–uteFtp鎴栬匩etAnt絳夊伐鍏風殑鏃跺欙紝涓鑸兘浼氳鍏跺鏉傜殑鐣岄潰鎵鍚稿紩錛屽湪榪欎簺鐣岄潰涓獥鍙h鍒嗗壊涓鴻嫢騫茬殑鍖哄煙錛岀湡姝e仛鍒頒簡紿楀彛鐨勪換鎰忓垎鍓層?閭d箞鎴戜滑鑷繁濡備綍鍒涘緩綾諱技鐨勭晫闈紝涔熷疄鐜扮獥鍙g殑浠繪剰鐨勫垎鍓插憿 錛熷湪VC6.0涓繖灝遍渶瑕佷嬌鐢ㄥ埌CSplitterWnd綾匯侰SplitterWnd鐪嬩笂鍘誨儚鏄竴縐嶇壒孌婄殑妗嗘灦紿楀彛錛屾瘡涓獥鍙i兘琚浉鍚岀殑鎴栬呬笉鍚岀殑瑙嗗浘鎵濉厖銆傚綋紿楀彛琚垏鍒嗗悗鐢ㄦ埛鍙互浣跨敤榧犳爣縐誨姩鍒囧垎鏉℃潵璋冩暣紿楀彛鐨勭浉瀵瑰昂瀵搞傝櫧鐒禫C6.0鏀寔浠嶢ppWizard涓垱寤哄垎鍓茬獥鍙o紝浣嗘槸鑷姩鍔犲叆鐨勫垎鍓叉潯鎬繪槸涓嶈兘璁╂垜浠弧鎰忥紝鍥犳鎴戜滑榪樻槸閫氳繃鎵嬪伐澧炲姞浠g爜鏉ョ啛鎮夎繖涓被銆?<br />CSplitterWnd鐨勬瀯閫犲嚱鏁頒富瑕佸寘鎷笅闈笁涓?<br /></p> <pre>BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle,UINT nID);</pre>鍔熻兘鎻忚堪錛氳鍑芥暟鐢ㄦ潵鍒涘緩鍔ㄦ佸垏鍒嗙獥鍙c?鍙傛暟鍚箟錛歱ParentWnd 鍒囧垎紿楀彛鐨勭埗妗嗘灦紿楀彛銆?nMaxRows,nMaxCols鏄垱寤虹殑鏈澶х殑鍒楁暟鍜岃鏁般?sizeMin鏄獥鏍肩殑鐜板疄澶у皬銆?pContext 澶у鏁版儏鍐典笅浼犵粰鐖剁獥鍙c?nID鏄瓧紿楀彛鐨処D鍙? <pre>BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle,UINT nID) </pre>鍔熻兘鎻忚堪錛氱敤鏉ュ垱寤哄垏鍒嗙獥鍙c?鍙傛暟鍚箟鍚屼笂銆?<pre>BOOL CreateView (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext);</pre>鍔熻兘鎻忚堪錛氫負闈欐佸垏鍒嗙殑紿楀彛鐨勭綉鏍煎~鍏呰鍥俱傚湪灝嗚鍥句簬鍒囧垎紿楀彛鑱旂郴鍦ㄤ竴璧風殑鏃跺欏繀 欏誨厛灝嗗垏鍒嗙獥鍙e垱寤哄ソ銆?<br />鍙傛暟鍚箟錛氬悓涓娿?br />浠嶤SplitterWnd婧愮▼搴忓彲浠ョ湅鍑轟笉綆℃槸浣跨敤鍔ㄦ佸垱寤篊reate榪樻槸浣跨敤闈欐佸垱寤篊reateStatic錛屽湪鍑芥暟涓兘璋冪敤浜嗕竴涓繚鎶ゅ嚱鏁癈reateCommon錛屼粠涓嬮潰鐨凜reateCommon鍑芥暟涓殑鍏抽敭浠g爜鍙互鐪嬪嚭鍒涘緩CSplitterWnd鐨勫疄璐ㄦ槸鍒涘緩浜嗕竴緋誨垪鐨凪DI瀛愮獥鍙c?<br /><pre>DWORD dwCreateStyle = dwStyle & ~(WS_HSCROLL|WS_VSCROLL); if (afxData.bWin4) dwCreateStyle &= ~WS_BORDER; //create with the same wnd-class as MDI-Frame (no erase bkgnd) if (!CreateEx(0, _afxWndMDIFrame, NULL, dwCreateStyle, 0, 0, 0, 0,pParentWnd->m_hWnd, (HMENU)nID, NULL)) return FALSE; // create invisible </pre><br /><b>浜屻佸垱寤哄祵濂楀垎鍓茬獥鍙?/b><br /><b>2.1鍒涘緩鍔ㄦ佸垎鍓茬獥鍙?/b><br />鍔ㄦ佸垎鍓茬獥鍙d嬌鐢–reate鏂規硶銆備笅闈㈢殑浠g爜灝嗗垱寤?x2鐨勭獥鏍箋?<br /><pre>m_wndSplitter.Create(this,2,2,CSize(100,100),pContext);</pre><br />浣嗘槸鍔ㄦ佸垱寤虹殑鍒嗗壊紿楀彛鐨勭獥鏍兼暟鐩笉鑳借秴榪?x2錛岃屼笖瀵逛簬鎵鏈夌殑紿楁牸錛岄兘蹇呴』鍏變韓鍚屼竴涓鍥撅紝鎵鍙楃殑闄愬埗涔熸瘮杈冨錛屽洜姝ゆ垜浠笉灝嗗姩鎬佸垱寤轟綔涓洪噸鐐廣傛垜浠殑涓昏綺懼姏鏀懼湪闈欐佸垎鍓茬獥鍙g殑鍒涘緩涓娿?<br /><b>2.2鍒涘緩闈欐佸垎鍓茬獥鍙?/b><br />涓庡姩鎬佸垱寤虹浉姣旓紝闈欐佸垱寤虹殑浠g爜瑕佺畝鍗曡澶氾紝鑰屼笖鍙互鏈澶氬垱寤?6x16鐨勭獥鏍箋備笉鍚岀殑紿楁牸鎴戜滑鍙互浣跨敤CreateView濉厖涓嶅悓鐨勮鍥俱?<br />鍦ㄨ繖閲屾垜浠皢鍒涘緩CuteFtp鐨勭獥鍙e垎鍓層侰uteFtp鐨勫垎鍓叉儏鍐靛涓嬶細 <div align="center"><table height="223" cellspacing="1" cellpadding="0" width="446" bgcolor="#666666" border="0"><tbody><tr bgcolor="#eeeeee"><td colspan="2" height="46"><div align="center"><font face="Arial, Helvetica, sans-serif" size="2">CCuteFTPView</font></div></td></tr><tr bgcolor="#eeeeee"><td height="123"><div align="center"><font face="Arial, Helvetica, sans-serif" size="2">CView2</font></div></td><td height="123"><div align="center"><font face="Arial, Helvetica, sans-serif" size="2">CView3</font></div></td></tr><tr bgcolor="#eeeeee"><td colspan="2" height="44"><div align="center"><font face="Arial, Helvetica, sans-serif" size="2">CView4</font></div></td></tr></tbody></table></div><p>鍒涘緩姝ラ錛?<br />鈻?鍦ㄥ垱寤轟箣鍓嶆垜浠繀欏誨厛鐢ˋppWizard鐢熸垚鍗曟枃妗uteFTP錛岀敓鎴愮殑瑙嗙被涓?CCuteFTPView.鍚屾椂鍦ㄥ鍔犱笁涓綾繪垨鑰呬粠瑙嗙被緇ф壙鑰屾潵鐨勬淳鐢熺被CView2,CView3 CView4. <br />鈻?<b>澧炲姞鎴愬憳錛?/b><br />鍦–mainfrm.h涓垜浠皢澧炲姞涓嬮潰鐨勪唬鐮侊細 <br /></p><pre>CSplitterWnd wndSplitter1; CSplitterWnd wndSplitter2;</pre>鈻?<b>閲嶈澆CMainFrame::OnCreateClient()鍑芥暟錛?/b><pre>BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { //鍒涘緩涓涓潤鎬佸垎鏍忕獥鍙o紝鍒嗕負涓夎涓鍒? if(m_wndSplitter1.CreateStatic(this,3,1)==NULL) return FALSE; //灝咰CuteFTPView榪炴帴鍒?琛?鍒楃獥鏍間笂 m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100), pContext); m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext); //灝咰View4榪炴帴鍒?琛?鍒? if(m_wndSplitter2.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE, m_wndSplitter.IdFromRowCol(1, 0))==NULL) return FALSE; //灝嗙1琛?鍒楀啀鍒嗗紑1琛?鍒? //灝咰View2綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒? m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext); //灝咰View3綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒? m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext); return TRUE; } </pre><b>2.3瀹炵幇鍚勪釜鍒嗗壊鍖哄煙鐨勯氫俊</b><br />鈻?b>鏈夋枃妗g浉榪炵殑瑙嗗浘涔嬮棿鐨勯氫俊<br /></b>鐢盇ppWizard鐢熸垚鐨凜CuteFTPView鏄笌鏂囨。鐩歌繛鐨勶紝鍚屾椂鎴戜滑涔熻CView2涓庢枃妗g浉榪烇紝鍥犳鎴戜滑闇瑕佷慨鏀笴CuteFTPApp鐨処nitInstance()鍑芥暟錛屾垜浠皢澧炲姞涓嬮潰鐨勯儴鍒嗐?br /><pre>AddDocTemplate (new CMultiDocTemplate(IDR_VIEW2TYPE, RUNTIME_CLASS(CMainDoc), RUNTIME_CLASS(CMDIChildWnd), RUNTIME_CLASS(CView2))); </pre>鎴戜滑鐜板湪鏉ュ疄鐜癈CuteFTPView涓嶤View2涔嬮棿鐨勯氫俊銆傜敱浜庤窡鏂囨。綾葷浉榪炵殑瑙嗗浘綾?鏄笉鑳藉畨鍏ㄧ殑涓庨櫎鏂囨。綾諱箣澶栫殑鍏朵綑鐨勮鍥劇被閫氫俊鐨勩傚洜姝ゆ垜浠彧鑳借浠栦滑閮戒笌鏂囨。 綾婚氫俊銆傚湪鏂囨。涓垜浠緗浉搴旂殑鎸囬拡浠ョ敤鏉ヨ幏鐨勫悇涓鍥俱傛垜浠噸杞?CCuteFTPView::OnOpenDocument()鍑芥暟錛?<br /><pre>CCuteFTPView* pCuteFTPView;<br />CView2* pView2; POSITION pos; CView* pView; while(pos!=NULL) { pView=GetNextView(pos); if(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) pCuteFTPView=(CCuteFTPView*)pView; else(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) pView2=(CView2*)pView; } </pre>榪欐牱鎴戜滑鍦ㄦ枃妗g被涓氨鑾風殑浜嗚窡瀹冪浉榪炵殑鎵鏈夌殑瑙嗗浘鐨勬寚閽堛?br />濡傛灉闇瑕佸湪 CCuteFTPView涓皟鐢–View2涓殑涓涓柟娉旸oIt()鍒欎唬鐮佸涓嬶細 <br /><pre>CCuteFTPDoc* pDoc=GetDocument();<br />CView2* pView2=pDoc->pView3;<br />pView3.DoIt(); </pre><br />鈻?b>鏃犳枃妗h鍥句笌鏂囨。鍏寵仈瑙嗗浘涔嬮棿鐨勯氫俊<br /></b>CView3鍜孋View4閮芥槸涓嶄笌鏂囨。鐩稿叧鑱旂殑銆傛垜浠幇鍦ㄥ疄鐜癈View3涓嶤View2鐨勯氫俊.姝e鍓嶉潰鎵璇達紝CView2鍙兘瀹夊叏鐨勪笌CCuteFTPDoc閫氫俊錛屽洜姝わ紝CView3濡傛灉闇瑕佽窡CView2閫氫俊錛屼篃蹇呴』鍊熷姪浜庢枃妗g被銆傚洜姝ょ▼搴忕殑鍏抽敭鏄浣曞湪CView3涓幏寰楁枃妗g殑鎸囬拡銆傝鍥劇被涓病鏈夎繖鏍風殑綾繪垚鍛樺彲浠ョ敤鏉ョ洿鎺ヨ闂枃妗g被銆備絾鏄垜浠煡閬撳湪涓葷獥鍙g被MainFrame涓垜浠彲浠ヨ幏寰楃▼搴忕殑浠繪剰紿楀彛綾葷殑鎸囬拡銆傚洜姝ゆ垜浠彧瑕佽幏寰楃▼搴忎富紿楀彛浜嗙殑鎸囬拡錛屽氨鍙互瑙e喅闂浜嗐備唬鐮佸疄鐜板湪CView3涓闂瓹View2涓殑DoIt()鏂規硶銆?br /><br />CView3涓殑浠g爜濡備笅錛?<pre>CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); CCuteFTPDoc* Doc=(CCuteFTPDoc*)MainFrame->GetActiveDocument(); if(Doc!=NULL) Doc->DoIt(); CCuteFTPDoc涓殑鐩稿簲鐨勫鐞嗗嚱鏁癉oIt()浠g爜濡備笅錛? CView2* pView2; POSITION pos; CView* pView; while(pos!=NULL) { pView=GetNextView(pos); if(pView->IsKindOf(RUNTIME_CLASS(CView2))==NULL) pView2=(CView2*)pView; } pView2->DoIt(); </pre>鈻?b>鏃犳枃妗e叧鑱旇鍥句箣闂寸殑閫氫俊<br /></b>CView3鍜孋View4閮芥槸涓嶈窡鏂囨。鐩歌繛鐨勶紝濡備綍瀹炵幇浠栦滑涔嬮棿鐨勯氫俊鍛€?姝e鎴戜滑鍦ㄤ笂闈㈡墍璇寸殑閭f牱錛岀敱浜庡湪涓繪鏋朵腑鎴戜滑鍙互璁塊棶浠繪剰鐨勮鍥撅紝鍥犳鎴戜滑鐨勪富瑕佷換 鍔¤繕鏄湪紼嬪簭涓幏寰椾富妗嗘灦鐨勬寚閽堛傚湪CView3涓闂瓹View4涓殑鏂規硶DoIt()銆?<br /><pre>CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); CView4* View4=(CView4*)MainFrame->m_wndSplitter1.GetPane(2,0); View4->DoIt(); </pre><br />鍒扮幇鍦ㄦ垜浠凡緇忓疄鐜頒簡CuteFTP鐨勪富紿楀彛鐨勬鏋跺茍涓旇兘澶熷疄鐜頒粬浠箣闂寸浉浜掗氫俊鐨勬鏋躲?鍚屾牱鐨勬垜浠彲浠ュ疄鐜板叾浠栫殑涓浜涙祦琛岀晫闈緥濡侼etAnts錛孎oxmail鐨勫垎鍓層?<br /><br /><b>涓夈佸叧浜庡璇濇鐨勫垎鍓?/b><br />鍒扮洰鍓嶄負姝紝鍙湁鍩轟簬鏂囨。/瑙嗗浘鐨勭▼搴忔墠鑳戒嬌鐢–SplitterWnd錛岃屽熀浜庡璇濇鐨勫簲鐢ㄧ▼搴忓嵈涓嶆敮鎸丆SplitterWnd,浣嗘槸濡傛灉鎴戜滑鍦ㄧ戶鎵跨被涓噸杞戒竴浜涜櫄鎷熸柟娉曪紝涔熻兘浣緾SplitterWnd 鍦ㄥ璇濇紼嬪簭涓嬌鐢ㄣ備粠MFC鐨勬簮紼嬪簭WinSplit.cpp涓彲浠ョ湅鍑猴紝涓轟簡鑾峰緱鐖剁獥鍙g殑鍦版柟紼嬪簭閮借皟鐢ㄤ簡铏氭嫙鏂規硶GetParentFrame(),鍥犳濡傛灉鍦ㄥ璇濇涓嬌鐢紝鎴戜滑蹇呴』灝嗗畠鏀逛負GetParent();鍥犳鎴戜滑灝咰SplitterWnd鐨勪笅闈㈠嚑涓柟娉曢噸杞姐?br /><pre>virtual void StartTracking(int ht); virtual CWnd* GetActivePane(int* pRow = NULL, int* pCol = NULL); virtual void SetActivePane( int row, int col, CWnd* pWnd = NULL ); virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult ); virtual BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult ); </pre>鍏蜂綋瀹炵幇濡備笅錛屽疄鐜頒腑鎴戝皢緇欏嚭鍘熸湁浠g爜鐨勪富瑕侀儴鍒嗕互鍙婁慨鏀瑰悗鐨勪唬鐮佷互浣滃姣斻?br />鍦╟pp鏂囦歡涓姞鍏ヤ笅闈㈢殑鏋氫婦綾誨瀷銆?<br /><pre>enum HitTestValue { noHit = 0,//琛ㄧず娌℃湁閫変腑浠諱綍瀵硅薄 vSplitterBox = 1, hSplitterBox = 2, bothSplitterBox = 3, vSplitterBar1 = 101,//浠h〃鍚勪釜鏂瑰悜鐨勬按騫沖垎鍓叉潯 vSplitterBar15 = 115, hSplitterBar1 = 201,//浠h〃鍨傜洿鏂瑰悜鐨勫悇涓垎鍓叉潯 hSplitterBar15 = 215, splitterIntersection1 = 301,//浠h〃鍚勪釜浜ゅ弶鐐? splitterIntersection225 = 525 }; <br /> CWnd* CxSplitterWnd::GetActivePane(int* pRow, int* pCol) { ASSERT_VALID(this); //鑾峰緱褰撳墠鐨勮幏寰楃劍鐐圭殑紿楀彛 //涓嬮潰娉ㄩ噴綺椾綋鐨勬槸鍘熸湁鐨勪唬鐮佺殑涓昏閮ㄥ垎銆? // CWnd* pView = NULL; //CFrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pView = pFrameWnd->GetActiveView(); //if (pView == NULL) // pView = GetFocus(); CWnd* pView = GetFocus(); if (pView != NULL && !IsChildPane(pView, pRow, pCol)) pView = NULL; return pView; } void CxSplitterWnd::SetActivePane( int row, int col, CWnd* pWnd) { CWnd* pPane = pWnd == NULL ? GetPane(row, col) : pWnd; //涓嬮潰鍔犳敞閲婄矖浣撶殑鏄師鏈変唬鐮佺殑涓昏閮ㄥ垎銆? //FrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pFrameWnd->SetActiveView((CView*)pPane); pPane->SetFocus();//淇敼鍚庣殑璇彞 } void CxSplitterWnd::StartTracking(int ht) { ASSERT_VALID(this); if (ht == noHit) return; // GetHitRect will restrict ''''m_rectLimit'''' as appropriate GetInsideRect(m_rectLimit); if (ht >= splitterIntersection1 && ht <= splitterIntersection225) { // split two directions (two tracking rectangles) int row = (ht - splitterIntersection1) / 15; int col = (ht - splitterIntersection1) % 15; GetHitRect(row + vSplitterBar1, m_rectTracker); int yTrackOffset = m_ptTrackOffset.y; m_bTracking2 = TRUE; GetHitRect(col + hSplitterBar1, m_rectTracker2); m_ptTrackOffset.y = yTrackOffset; } else if (ht == bothSplitterBox) { // hit on splitter boxes (for keyboard) GetHitRect(vSplitterBox, m_rectTracker); int yTrackOffset = m_ptTrackOffset.y; m_bTracking2 = TRUE; GetHitRect(hSplitterBox, m_rectTracker2); m_ptTrackOffset.y = yTrackOffset; // center it m_rectTracker.OffsetRect(0, m_rectLimit.Height()/2); m_rectTracker2.OffsetRect(m_rectLimit.Width()/2, 0); } else { // only hit one bar GetHitRect(ht, m_rectTracker); } //涓嬮潰鍔犳敞閲婄殑灝嗕粠紼嬪簭涓垹鍘匯? //CView* pView = (CView*)GetActivePane(); //if (pView != NULL && pView->IsKindOf(RUNTIME_CLASS(CView))) //{ // ASSERT_VALID(pView); // CFrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pView->OnActivateFrame(WA_INACTIVE, pFrameWnd); // } // steal focus and capture SetCapture(); SetFocus(); // make sure no updates are pending RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_UPDATENOW); // set tracking state and appropriate cursor m_bTracking = TRUE; OnInvertTracker(m_rectTracker); if (m_bTracking2) OnInvertTracker(m_rectTracker2); m_htTrack = ht; SetSplitCursor(ht); } BOOL CxSplitterWnd::OnCommand(WPARAM wParam, LPARAM lParam) { if (CWnd::OnCommand(wParam, lParam)) return TRUE; //涓嬮潰綺椾綋鐨勬槸鍘熺▼搴忕殑璇彞 //<b>return GetParentFrame()->SendMessage(WM_COMMAND, wParam, lParam); </b> return GetParent()->SendMessage(WM_COMMAND, wParam, lParam); } BOOL CxSplitterWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult ) { if (CWnd::OnNotify(wParam, lParam, pResult)) return TRUE; //涓嬮潰綺椾綋鐨勬槸婧愮▼搴忕殑璇彞 //<b>*pResult = GetParentFrame()->SendMessage(WM_NOTIFY, wParam, lParam);</b> *pResult = GetParent()->SendMessage(WM_NOTIFY, wParam, lParam); return TRUE; } BOOL CxSplitterWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // The code line below is necessary if using CxSplitterWnd in a regular dll // AFX_MANAGE_STATE(AfxGetStaticModuleState()); return CWnd::OnWndMsg(message, wParam, lParam, pResult); } </pre>榪欐牱鎴戜滑灝卞彲浠ュ湪瀵硅瘽妗嗕腑浣跨敤CxSplitterWnd綾諱簡銆?<br /><br /><b>鍥涖丆SplitterWnd鐨勬墿灞?/b><br />CSplitterWnd鎵╁睍璇濋鏄緢澶氱殑錛屾垜浠彲浠ラ氳繃瀵瑰師鏈夋柟娉曠殑瑕嗙洊鎴栬呭鍔犳柊鐨勬柟娉曟潵鎵╁睍CSplitterWnd銆傛垜浠湪姝や粎涓句袱涓柟闈㈢殑渚嬪瓙銆?<br /><b>4.1閿佸畾鍒囧垎鏉?/b><br />褰撶敤鎴峰垱寤哄ソ鍒嗗壊紿楀彛鍚庯紝鏈夋椂騫朵笉甯屾湜閫氳繃鎷栧姩鍒囧垎鏉℃潵璋冭妭紿楀彛鐨勫ぇ灝忋傝繖鏃跺氨蹇呴』閿佸畾鍒囧垎鏉°傞攣瀹氬垏鍒嗘潯鐨勬渶綆鍗曠殑鏂規硶鑾繃浜庝笉璁〤SplitterWnd鏉ュ鐞哤M_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR娑堟伅錛岃屾槸灝嗚繖浜涙秷鎭氦緇機Wnd紿楀彛榪涜澶勭悊錛屼粠鑰屽睆钄芥帀榪欎簺娑堟伅銆傛嬁WM_LBUTTONDOWN澶勭悊榪囩▼鏉ヨ銆備慨鏀逛負濡備笅錛?<br /><pre>void CXXSplitterWnd::OnLButtonDown(UINT nFlags,CPoint point) <br />{ CWnd::OnLButtonDown(nFlags,point); } </pre>鍏朵綑鐨勫鐞嗘柟娉曠被浼箋?<br /><b>4.2鍒囧垎鏉$殑瀹氬埗</b><br />鐢盬indow鑷繁鐢熸垚鐨勫垏鍒嗘潯鎬繪槸鍥哄畾鐨勶紝娌℃湁浠諱綍鐨勫彉鍖栵紝鎴戜滑鍦ㄤ嬌鐢ㄤ竴浜涜蔣浠舵瘮濡侫CDSee鐨勬椂鍊欏嵈鑳藉彂鐜板畠浠殑鍒囧垎鏉″嵈鏄拰鑷姩鐢熸垚鐨勫垏鍒嗘潯涓嶄竴鏍風殑銆傞偅涔堝浣曞畾鍒惰嚜宸辯殑鍒囧垎鏉″憿錛熼氳繃閲嶈澆CSplitterWnd鐨勮櫄鏂規硶OnDrawSplitter鍜孫nInvertTracker鍙互杈懼埌榪欐牱鐨勭洰鐨勩備笅闈㈢殑浠g爜鐢熸垚鐨勬晥鏋滄槸鍒嗗壊紿楀彛鐨勮竟鐣岄鑹蹭負綰㈣壊錛屽垎鍓叉潯鐨勯鑹蹭負緇胯壊.浠g爜濡備笅錛?br /><pre>void CSplitterWndEx::OnDrawSplitter(CDC *pDC, ESplitType nType, const CRect &rectArg) { if(pDC==NULL) { RedrawWindow(rectArg,NULL,RDW_INVALIDATE|RDW_NOCHILDREN); return; } ASSERT_VALID(pDC); CRect rc=rectArg; switch(nType) { case splitBorder: //閲嶇敾鍒嗗壊紿楀彛杈圭晫,浣夸箣涓虹孩鑹? pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); return; case splitBox: pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->FillSolidRect(rc,RGB(0,0,0)); pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); return; case splitBar: //閲嶇敾鍒嗗壊鏉★紝浣夸箣涓虹豢鑹? pDC->FillSolidRect(rc,RGB(255,255,255)); rc.InflateRect(-5,-5); pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); return; default: ASSERT(FALSE); } pDC->FillSolidRect(rc,RGB(0,0,255)); } void CSplitterWndEx::OnInvertTracker(CRect &rect) { ASSERT_VALID(this); ASSERT(!rect.IsRectEmpty()); ASSERT((GetStyle()&WS_CLIPCHILDREN)==0); CRect rc=rect; rc.InflateRect(2,2); CDC* pDC=GetDC(); CBrush* pBrush=CDC::GetHalftoneBrush(); HBRUSH hOldBrush=NULL; if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject); pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS); if(hOldBrush!=NULL) SelectObject(pDC->m_hDC,hOldBrush); ReleaseDC(pDC); } </pre>鍚屾牱鎴戜滑鍙緇ф壙CSplitterWnd涓殑鍏朵綑鐨勪竴浜涜櫄鎷熸柟娉曞氨鍙互鐢熸垚鍏鋒湁鑷繁涓х殑鍒嗗壊紿楀彛浜嗐?br /><br />鎴戠殑鐢靛瓙淇$錛歵ingya@njpost.com.cn 鍜宼ingya@263.net <br />鍦板潃錛氬崡浜偖鏀垮眬璁$畻鏈轟腑蹇?寮犱腑搴?<br />閭斂緙栫爜錛?10008 </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> <img src ="http://m.shnenglu.com/microli/aggbug/11913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/microli/" target="_blank">閾佽闊?/a> 2006-09-01 09:56 <a href="http://m.shnenglu.com/microli/articles/11913.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>VC++瀹炵幇娣峰悎闈欐佸垎瑁傝紿楃殑鏂規硶http://m.shnenglu.com/microli/articles/11911.html閾佽闊?/dc:creator>閾佽闊?/author>Fri, 01 Sep 2006 01:54:00 GMThttp://m.shnenglu.com/microli/articles/11911.html 鎽樿 鏈枃浠FC錛圡icrosoft Foundation Class Library錛夌殑CsplitterWnd綾誨埆涓哄熀紜錛岄氳繃瀵瑰崟鏂囨。瑙嗙獥鐨勯潤鎬佸垎瑁傚師鐞嗚繘琛屽垎鏋愶紝浠嬬粛娣峰悎闈欐佸垎瑁傝紿楃殑瀹炵幇鏂規硶錛屽茍娣卞叆闃愯堪瀛愯紿楃殑瑙嗗浘鍔ㄦ佸垏鎹㈡妧鏈?/p>

鍏抽敭璇?/b> 闈欐佸垎瑁傝紿?鍔ㄦ佸垏鎹㈣鍥?娣峰悎鍒嗚瑙嗙獥

鍓嶈█

鍦ㄨ澶氳紿楀簲鐢ㄨ蔣浠朵腑錛岄氬父瑕佸湪灞忓箷涓婂悓鏃舵樉紺鴻嫢騫蹭釜瀛愯紿楋紝浠ユ樉紺哄悓涓涓枃妗g殑涓嶅悓閮ㄥ垎錛屾垨鑰呮槸鍦ㄦ瘡涓紿椾腑鍒嗗埆鏄劇ず涓嶅悓鏂囨。鐨勫唴瀹廣備負浜嗗疄鐜板瑙嗙獥鐣岄潰錛屽彲浠ラ噰鐢∕DI(Multiple Document Interface)鐨勫鏂囨。妯″紡榪涜澶勭悊錛屼絾鏄鏂囨。鐨勫簲鐢ㄧ▼搴忚璁′笌緇存姢鐩稿浜庡崟鏂囨。鐨勫簲鐢ㄧ▼搴忚岃█姣旇緝澶嶆潅銆傝屼笖錛屽鏋滆鍦ㄥ睆騫曚笂鍚屾椂鏄劇ず澶氫釜瀛愯紿楋紝閫氬父瑕佸埄鐢ㄨ紿楅噸鍙犲嚱鏁拌繘琛岀鐞嗭紝姣忎釜瀛愯紿楃殑浣嶇疆寰寰闇瑕佺敤榧犳爣浜轟負璁懼畾錛岃繃澶氱殑浜轟負騫查闄嶄綆浜嗙▼搴忎嬌鐢ㄧ殑鏁堢巼銆傚洜姝わ紝濡傛灉鑳藉鍗曟枃妗h紿楀仛閫傚綋鐨勫垎瑁傦紝鏃犵枒紼嬪簭浣跨敤鑰呭皢鍙互寰楀埌鏇存槗浜庢搷浣滅殑鎺ュ彛錛屾暟鎹殑鏄劇ず涔熸洿鍔犵洿瑙傚拰鏂逛究銆傛湰鏂囬氳繃瀵瑰崟鏂囨。瑙嗙獥鐨勯潤鎬佸垎瑁傚師鐞嗚繘琛屽垎鏋愶紝瀹炵幇涓婅堪瑕佹眰銆?

浜屽垎瑁傝紿楃殑綾誨瀷

瑙嗙獥鐨勫垎瑁傚彲鍒嗕負涓ょ綾誨瀷錛屼竴鏄姩鎬佸垎瑁傦紝浜屾槸闈欐佸垎瑁傘傚姩鎬佸垎瑁傚彲浠ヨ浣跨敤鑰呴氳繃鎷栨洺鍒嗚鏂瑰潡鐨勪嬌鐢紝灝嗚紿楀垎瑁傘備絾鏄紝鍔ㄦ佸垎瑁傛渶澶氬彧鍙互灝嗚紿楀垎瑁備負2脳2涓瓙瑙嗙獥錛屼笉鑳借繘琛屾販鍚堝垎瑁傝紿楋紝鎵鏈夊瓙瑙嗙獥鐨勫睘鎬у拰鐖惰紿楅兘鏄竴鏍風殑錛岃屼笖瀛愯紿楃殑鏁版嵁閫氬父鏉ユ簮浜庡悓涓澶勩傝岄潤鎬佸垎瑁傦紝浣跨敤鑰呴櫎浜嗗彲浠ヨ皟鏁村瓙瑙嗙獥鐨勫ぇ灝忓拰榪涜娣峰悎鍒嗚瑙嗙獥澶栵紝鏈澶氬彲灝嗚紿楀垎瑁備負16脳16涓瓙瑙嗙獥錛屾瘡涓瓙瑙嗙獥鍙互鏈夊悇鑷笉鍚岀殑瑙嗗浘綾?CView)錛屽悇涓瓙瑙嗙獥鏄劇ず鐨勬暟鎹彲浠ユ潵鑷簬涓嶅悓鐨勬暟鎹簮銆備笉璁烘槸瑕佸垱寤哄姩鎬佸垎瑁傝紿楄繕鏄潤鎬佸垎瑁傝紿楋紝閮藉繀欏昏鍒╃敤MFC鐨凜SplitterWnd綾誨埆鏉ュ畬鎴愯紿楃殑鍒嗚銆?/p>

娣峰悎闈欐佸垎瑁傝紿楃殑瀹炵幇

娣峰悎鍒嗚瑙嗙獥鏄寚鍦ㄥ瓙瑙嗙獥涓繘琛岃紿楃殑鍐嶅垎瑁傘傚湪MFC鐨勬鏋朵笅錛屾販鍚堝垎瑁傝紿楀繀欏誨畬鎴愪笁浠跺伐浣滐細

鈶村湪瑙嗙獥妗嗘灦綾誨埆涓畾涔塁SplitterWnd鎺т歡涓哄叾灞炴э紙鏁版嵁鎴愬憳錛夈?/p>

鈶甸噸杞借紿楁鏋剁被鍒腑鐨凮nCreateClient鍑芥暟錛圕FrameWnd::OnCreateClient錛夛紝寤虹珛闈欐佸垎瑁傚瓙瑙嗙獥錛屼負闈欐佸垎瑁傚瓙瑙嗙獥濉厖瑙嗗浘銆?/p>

鈶跺緩绔嬬淮鎸佸悇瀛愯紿楀悓姝ユ洿鏂扮殑鏈哄埗銆?/p>

棣栧厛錛屽埄鐢∕FC AppWizard鐢熸垚涓涓崟鏂囨。搴旂敤紼嬪簭錛屽湪搴旂敤紼嬪簭鐨凜MainFrame綾誨埆涓0鏄嶤SplitterWnd綾誨埆鐨勬暟鎹垚鍛樸?/p>

鍏舵錛岄噸杞紺MainFrame綾誨埆涓殑OnCreateClient(LPCREATESTRUCT,CCreateContext* pContext)鍑芥暟銆傚湪璇ュ嚱鏁頒腑鍒╃敤CsplitterWnd綾誨埆鐨勬瀯閫犲嚱鏁癈reate Static(CWnd *pParentWnd,int nRows,int nCols,DWORD dwstyle,UINT nID) 鍒涘緩娣峰悎闈欐佸垎瑁傚瓙瑙嗙獥錛屽嵆鍦–reate Static鍒嗚鍑虹殑瀛愯紿椾腑鍒╃敤CsplitterWnd綾誨埆鐨勬帶浠跺啀涓嬈″垎瑁傝紿椼?/p>

Create Static鍑芥暟鐨勫弬鏁板惈涔変負錛?/p>

路pParentWnd鏄噯澶囧緩绔嬮潤鎬佸垎瑁傝紿楃殑瑙嗙獥妗嗘灦鎺т歡鐨勬寚閽堬紱

路nRows鍜宯Cols鏄噯澶囧緩绔嬮潤鎬佸垎瑁傝紿楄鏁幫紙nRows錛変笌鍒楁暟錛坣Cols錛?/p>

鍥犳錛屽垱寤虹殑闈欐佸垎瑁傚瓙瑙嗙獥涓暟涓簄Rows 脳 nCols涓紝榪欎袱涓弬鏁版渶灝忎笉寰楀皬浜?錛屾渶澶т笉鍙秴榪?6錛沝wstyle鏄瀹氬瓙瑙嗙獥鐨勫艦寮忥紱nID闈欐佸垎瑁傜殑浠e彿錛圛D錛夛紝姝や唬鍙烽璁句負AFX_IDW_PANE_FIRST錛岃嫢闈欐佸垎瑁傝紿椾綅浜庡彟涓涓垎瑁傝紿楀唴鏃訛紝涓嶅彲浠ヤ嬌鐢ㄩ粯璁ゅ鹼紝鍙互鍒╃敤CsplitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癐dFromRowCol(int row,int col)鑾峰緱銆傚埄鐢–splitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癈reate View (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext) 涓洪潤鎬佸垎瑁傚瓙瑙嗙獥濉厖瑙嗗浘錛屽湪灝嗚鍥句笌瀛愯紿楀叧鑱旀椂蹇呴』鍏堝畬鎴愬瓙瑙嗙獥鐨勫垱寤恒?/p>

Create View鍑芥暟鐨勫弬鏁板惈涔変負錛?

路row鍜宑ol鏄寚瀹氬噯澶囧緩绔媀iew鎺т歡鐨勫瓙瑙嗙獥錛屽叾鎸囧畾鐨勬柟寮忔槸浠ヨ〃紺鴻瀛愯紿楁墍鍦ㄧ殑琛屽垪浣嶇疆錛?/p>

路pViewClass鏄寚瀹氱敤浜庡緩绔嬪瓙瑙嗙獥View鎺т歡鐨刅iew綾誨埆錛岃綾誨埆闇瑕佽澹版槑涓篟un-Time綾誨埆錛?/p>

路Sizeini鏄疺iew鎺т歡鐨勮搗濮嬪ぇ灝忥紱pContext鏄竴涓寚鍚戣褰曞簲鐢ㄧ▼搴忔墍浣跨敤鐨勮紿楁鏋舵帶浠躲丏ocument鎺т歡錛屼互鍙奦iew鎺т歡涔嬪彉閲忕殑鎸囬拡錛屾鍙傛暟鍦–MainFrame::OnCreateClient鍑芥暟琚皟鐢ㄦ椂浼犲叆錛屽啀鐢辮鍑芥暟浼犻掔粰姝ゅ嚱鏁般?/p>

路CsplitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癝etColumnInfo(int col,int cxIdeal,int cxMin)鍜孲etRowInfo(int row,int cyIdeal,cyMin)涓鴻緗瓙瑙嗙獥鐨勫搴﹀拰楂樺害錛屽弬鏁癱xIdeal鍜宑xMin鏄寚瀹氬瓙瑙嗙獥鐨勫搴﹀拰鏈灝忓搴︼紝cyIdeal鍜宑yMin鏄寚瀹氬瓙瑙嗙獥鐨勯珮搴﹀拰鏈灝忛珮搴︼紝鍦ㄤ嬌鐢ㄨ繖涓や釜鍑芥暟璋冩暣瀛愯紿楃殑澶у皬鍚庤繕搴旇浣跨敤璇ョ被鍒殑鎴愬憳鍑芥暟RecalLayout()閲嶆柊璋冩暣瑙嗙獥妗嗘灦鐨勫竷灞銆傚鏋滆璁懼畾瑙嗙獥妗嗘灦閲岀殑媧誨姩瀛愯紿楋紝鍙互閫氳繃CsplitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癝etActivePane(int row,int col,CWnd* pWnd=NULL)鏉ュ畬鎴愶紝璇ュ嚱鏁版寚瀹氬瓙瑙嗙獥鐨勬柟寮忔湁涓ょ錛屼竴鏄寚鍑哄瓙瑙嗙獥鎵鍦ㄧ殑琛屽垪錛屼簩鏄紶鍏ユ寚鍚戣瀛愯紿楃殑鎺т歡鎸囬拡銆?/p>

鏈鍚庯紝灝嗚紿楀垎瑁傛垚澶氫釜瀛愯紿楀悗錛屾暣涓紿楃▼搴忎腑灝嗗瓨鍦ㄥ涓猇iew鎺т歡銆傚綋鍦ㄥ叾涓竴涓猇iew鎺т歡鎵ц鏇存柊鎿嶄綔鏃訛紝濡備綍璁╁叾瀹僔iew鎺т歡鍚屾鏇存柊鏁版嵁錛熷彲浠ラ氳繃鏂囨。綾誨埆錛圕Document錛夌殑UpdateAllViews(CView* pSender,LPARAM lHint,CObject* pHint)鎴愬憳鍑芥暟鐨勮皟鐢紝鍐嶇敱璇ュ嚱鏁板垎鍒皟鐢ㄧ洰鍓嶅瓨鍦ㄤ簬瑙嗙獥紼嬪簭涓悇View鎺т歡鐨凮n Update鍑芥暟鏉ュ畬鎴愭暟鎹殑鍚屾鏇存柊銆?/p>

UpdateAllViews鍑芥暟鐨勫弬鏁板惈涔変負錛?/p>

路pSender鏄寚鍚戝紩鍙戞洿鏂版搷浣滅殑View鎺т歡鎸囬拡錛屽鏋滀紶鍏ULL琛ㄧず鎵鏈夎鍥鵑兘瑕佹墽琛屾洿鏂版搷浣滐紱

路lHint鏄敤浜庝紶閫佹洿鏂拌鍥炬椂錛岄渶瑕佷紶閫佺殑棰濆淇℃伅鍙傛暟錛?/p>

路pHint鏄寚鍚戣褰曟洿鏂拌鍥炬墍闇棰濆淇℃伅鐨勬帶浠躲傚湪璋冪敤璇ュ嚱鏁版椂錛屽皢View鎺т歡鐨勬寚閽堜紶鍏ョ殑鐩殑鏄鍛婅瘔璇ュ嚱鏁拌瀛愯鍥懼凡緇忓畬鎴愭暟鎹洿鏂幫紝璇ュ嚱鏁頒笉闇瑕佸啀璋冪敤璇ュ瓙瑙嗗浘鐨凮n Update榪涜鏁版嵁鏇存柊銆?/p>

瀛愯鍥劇殑鍔ㄦ佸垏鎹?/b>

鍦ㄥ瑙嗗浘搴旂敤紼嬪簭涓紝鍙互閫氳繃鏀瑰彉CCreateContext瀵硅薄鐨勫鹼紝鏉ュ垱寤烘洿鍔犵伒媧葷殑瑙嗗浘錛屽疄鐜板瑙嗗浘鐨勫姩鎬佸垏鎹€侰CreateContext鏄疢FC妗嗘灦鎵浣跨敤鐨勪竴縐嶆暟鎹粨鏋勶紝瀹冨皢鏋勬垚鏂囨。/瑙嗗浘緇撴瀯鐨勭粍浠惰仈緋昏搗鏉ャ傝繖涓粨鏋勫寘鎷寚鍚戞枃妗g殑鎸囬拡銆佽紿楁鏋剁殑鎸囬拡銆佽鍥劇殑鎸囬拡浠ュ強鏂囨。妯℃澘鐨勬寚閽堬紝瀹冭繕鍖呭惈涓涓寚鍚慍RuntimeClass緇撴瀯鐨勬寚閽堬紝浠ユ寚鏄庢墍鍒涘緩鐨勮鍥劇殑綾誨瀷銆?/p>

鍏舵暟鎹垚鍛樺涓嬶細

路m_pNewViewClass鏄寚鍚戝垱寤轟笂涓嬫枃鐨勮鍥劇殑CRuntimeClass緇撴瀯鐨勬寚閽堬紱

路m_pNewDocTemplate鏄寚鍚戜笌瑙嗙獥妗嗘灦鐨勫垱寤虹浉鑱旂郴鐨勬枃妗fā鏉跨殑鎸囬拡錛?/p>

路m_pCurrentDoc鏄寚鍚戞枃妗e璞$殑鎸囬拡錛屼互鍜屾柊瑙嗗浘鑱旂郴璧鋒潵錛?/p>

路m_pLastView鏄寚鍚戝凡瀛樺湪鐨勮鍥劇殑鎸囬拡錛屽畠鏄柊浜х敓鐨勮鍥劇殑妯″瀷錛?/p>

路m_pCurrentFrame鏄寚鍚戝凡瀛樺湪鐨勮紿楁鏋剁殑鎸囬拡錛屽畠鏄柊浜х敓鐨勮紿楁鏋剁殑妯″瀷銆?/p>

姝ゅ錛屼換浣曚竴涓粠CObject綾誨埆緇ф壙鑰屾潵鐨勫瓙綾誨埆錛屽湪浣跨敤瀹廌ECLARE_DYNAMIC銆丏ECLARE_DYNCREATE銆丏ECLARE_SERIAL涓変釜涓殑浠繪剰涓涓椂閮戒細浜х敓涓涓狢RuntimeClass緇撴瀯鐨勯潤鎬佸璞★紝RUNTIME_CLASS榪斿洖鐨勫氨鏄繖涓璞$殑鎸囬拡錛岃繖涓璞″寘鍚簡鍏跺熀綾誨拰鏈韓鍦ㄨ繍琛屾椂鍒葷殑淇℃伅銆?/p>

鍦ㄥ崟鏂囨。闈欐佸垎瑁傝紿楃殑搴旂敤紼嬪簭涓紝鍒╃敤CsplitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癉elete View(int row,int col)鍙互鍒犻櫎瀛愯紿楃殑鍘熸湁瑙嗗浘錛岀劧鍚庡啀閫氳繃璇ョ被鍒殑鎴愬憳鍑芥暟Create View涓哄瓙瑙嗙獥鍒涘緩鏂扮殑瑙嗗浘銆備絾鏄紝鍒涘緩鏂拌鍥懼墠蹇呴』鍒濆鍖栧垱寤轟笂涓嬫枃鐩稿叧鎸囬拡錛屽嵆瀵笴CreateContext緇撴瀯璧嬪箋傚煎緱娉ㄦ剰鐨勬槸錛屼嬌鐢–reate View鍑芥暟鍒涘緩鐨勬柊瑙嗗浘涓嶈兘鑷姩璋冪敤瑙嗗浘綾誨埆鐨勬垚鍛樺嚱鏁癘nInitialUpdate鍜岃嚜鍔ㄦ樉紺哄茍涓旀縺媧繪柊瑙嗗浘錛岄渶瑕佷漢宸ヨ皟鐢∣nInitialUpdate鍑芥暟鍜孲howWindow(SW_SHOW) 鍑芥暟錛岃繖浜涘嚱鏁扮殑璋冪敤閮藉彲浠ラ氳繃CsplitterWnd綾誨埆鐨勬垚鍛樺嚱鏁癎et Pane(int row,int col)鑾峰緱鏂拌鍥劇殑鎸囬拡鏉ュ畬鎴愩?/p>

緇撴潫璇?/b>

鍦∕FC鐨勬鏋朵笅錛屾販鍚堝垎瑁傝紿楁湁澶氱緙栫▼鏂規硶錛屾湰鏂囧彧鏄粠CsplitterWnd綾誨埆鐨勮搴﹀幓鍒嗘瀽娣峰悎闈欐佸垎瑁傝紿楃殑瀹炵幇鏂規硶錛屽笇鏈涜兘緇欒鑰呰搗鍒版姏鐮栧紩鐜夌殑浣滅敤銆?



]]>
VC涓嬌鐢↙istCtrl緇忛獙鎬葷粨(1)http://m.shnenglu.com/microli/articles/11499.html閾佽闊?/dc:creator>閾佽闊?/author>Sun, 20 Aug 2006 11:28:00 GMThttp://m.shnenglu.com/microli/articles/11499.html鏁呮葷粨浜嗕竴涓嬭嚜宸辯殑浣跨敤緇忛獙錛屼互渚涘弬鑰冧嬌鐢ㄣ?/p>

銆銆鍏堟敞鏄庝竴涓嬶紝榪欓噷錛屾垜浠敤m_listctrl鏉ヨ〃紺轟竴涓狢ListCtrl鐨勭被瀵硅薄錛?/p>

鐒跺悗榪欓噷鎴戜滑鐨凩istCtrl閮芥槸report褰㈠紡錛岃嚦浜庡叾浠栫殑濡備粈涔堝ぇ鍥炬爣錛屽皬鍥炬爣

鐨勬殏鏃朵笉璁詫紝姣曠珶report鏄ぇ浼楄瘽鐨勪嬌鐢ㄣ傚叾嬈★紝鎴戜滑榪欓噷鐢ㄦ潯嬈句竴錛屾潯嬈句簩

鏉ユ弿榪扮涓鐐癸紝絎簩鐐癸紝榪欎釜鏄弬鐓с奅ffective C++銆嬬殑鍙硶錛屼亢瑙夊緱榪欎箞

鍙瘮杈僀OOL :)

銆鏉℃涓錛氳緗甃istCtrl鐨勯鏍?/p>

銆鍦–SDN涓婂父甯哥湅鍒版湁浜洪棶鎬庝箞璁劇疆椋庢牸鐨勶紝浠栦滑ListCtrl鐨勬牱瀛愭槸涓涓垪琛?/p>

錛屾湁妯潯鍜岀珫鏉″垎鐣岀嚎錛岀劧鍚庨変腑涓琛岋紝瑕佹暣涓琛岄兘閫変腑錛岃屼笉鏄彧鏈夋煇涓鍒?/p>

琚変腑錛岀瓑絳夛紝榪欓噷緇欎竴涓瘮杈冨叏闈㈢殑璁劇疆鏂規硶銆?/p>

//鑾峰緱鍘熸湁椋庢牸
聽DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
聽dwStyle &= ~(LVS_TYPEMASK);
聽dwStyle &= ~(LVS_EDITLABELS);

聽//璁劇疆鏂伴鏍?br />聽聽聽 SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,

dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);


聽//璁劇疆鎵╁睍椋庢牸
聽DWORD styles =

LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;

聽ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,

styles );

鍏朵腑LVS_EX_FULLROWSELECT銆灝辨槸鍓嶉潰璇村緱鏁磋閫変腑

LVS_EX_GRIDLINES銆緗戞牸綰匡紙鍙傜敤涓巖eport椋庢牸鐨刲istctrl錛?/p>

LVS_EX_CHECKBOXES銆鍓嶉潰鍔犱釜checkbox

pListCtrl->SetExtendedStyle(聽 m_listctrl.GetExtendedStyle()

|LVS_EX_SUBITEMIMAGES);


榪欎篃鏄竴涓緢閲嶈鐨勫睘鎬э紝榪欐牱鐨勮瘽錛屽彲浠ュ湪鍒楄〃涓姞ICON錛岃寰梬indows鐨?/p>

浠誨姟綆$悊鍣ㄥ悧錛屼綘鎯沖仛寰楅偅鏍鳳紝榪欎釜灞炴т篃瑕佸姞鍝︼紝榪欎釜鎴戜互鍚庝細璁茬殑锝?/p>

鏉℃浜岋細鍔犲叆鍒楀ご

銆銆榪欐槸涓涓瘮杈冨疄璐ㄧ殑涓滆タ錛岀粰鍒楄〃妗嗗垎鍒楋紝鐒跺悗鍔犱笂鍒楀ご

銆銆浠g爜璇磋瘽錛屾潵浜?/p>

銆銆TCHAR rgtsz[2][10] = {_T("鍒楀ご1"), _T("鍒楀ご2")};

聽LV_COLUMN lvcolumn;
聽CRect rect;
聽m_listctrl.GetWindowRect(&rect);
聽for(int i=0;i<2;i++)
聽{
聽 銆lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
聽聽聽聽 銆銆銆銆銆銆銆銆 | LVCF_WIDTH | LVCF_ORDER;
聽 銆lvcolumn.fmt = LVCFMT_LEFT;
聽 銆lvcolumn.pszText = rgtsz[i];
聽銆 lvcolumn.iSubItem = i;
聽 銆lvcolumn.iOrder = i;
聽銆 if(i==0)
聽 銆{
聽聽 銆銆銆lvcolumn.cx = rect.Width()*3/5 ;
聽銆 }
聽銆 else
聽聽 銆銆lvcolumn.cx = rect.Width()*2/5;
聽 銆銆銆銆

銆銆銆m_listctrl.InsertColumn(i, &lvcolumn);
聽銆}

榪欐槸鎻掑叆涓ゅ垪鐨勫仛娉曪紝浣犺鎻掑叆20鍒楋紵錛熼殢渚夸綘錛屼緷鏍風敾钁姦锝烇綖

銆lvcolumn.mask 涓偅涓猰ask鍙互鏈夊悇縐嶅睘鎬э紝鍏蜂綋鍘葷湅msdn鍚э紝

鏉℃涓夛細鎶婅褰曪紝鎻掑叆鍒楄〃妗嗕腑

銆int nIndex = m_listctrl.GetItemCount();

聽 LV_ITEM聽聽 lvitemAdd = {0};
聽 lvitemAdd.mask = LVIF_TEXT;
聽 lvitemAdd.iItem = nIndex ;
聽 lvitemAdd.iSubItem = 0;
聽 lvitemAdd.pszText =_T("姣涙瘺1");;


聽 if (m_listctrl.InsertItem(&lvitemAdd) != -1)
聽 {
聽聽 LV_ITEM lvitem = {0};
聽聽 lvitem.mask = LVIF_TEXT;
聽聽 lvitem.iItem = nIndex ;
聽聽 lvitem.iSubItem = 1;

聽聽 lvitem.pszText =_T("姣涙瘺2");
聽聽 m_listctrl.SetItem(&lvitem);
聽聽
聽 }

nIndex 鏄綋鍓嶇殑琛屾暟錛岀劧鍚庢妸鏂扮殑涓琛岋紝鎻掑湪鏈涓嬮潰錛?/p>

鏉℃鍥涳細緇欏垪琛ㄤ腑鎻掑叆鍥炬爣

銆鍦╮eport鏍煎紡涓紝涔熻兘鎻掑叆鍥炬爣

銆緇х畫浠g爜璇磋瘽

銆m_image鏄釜CImageList瀵硅薄

銆m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);

聽m_listctrl.SetImageList(&m_image,LVSIL_SMALL);

鐒跺悗璋冪敤CImageList鐨勬垚鍛樺嚱鏁癷nt CImageList::Add( HICON hIcon );

鎶奍CON鎻掑叆鍒癷magelist錛?/p>

銆鐒跺悗鍦ㄦ彃鍏ヨ褰曠殑鏃跺?/p>

銆lvitemAdd.mask = LVIF_TEXT;銆錛嶃嬨lvitemAdd.mask =

LVIF_TEXT|LVIF_IMAGE

銆鐒跺悗娣誨姞涓涓猯vitemAdd.iImage = n;

銆榪欎釜n鏄痠magelist涓殑搴忓彿錛岃〃紺烘槸鍏蜂綋鐨勫摢涓涓浘鏍囷紝list涔堬紝鍛靛懙

鏉℃浜旓細銆鎻掑叆璁板綍鏃朵嬌鐢ㄩ澶栫殑淇℃伅錛宭Param 鐨勪嬌鐢?/p>

銆銆銆鏈夋椂鍊欙紝浣犳兂瀵逛簬鏌愪竴琛岋紝鍔犲叆涓浜涢澶栫殑淇℃伅錛岄偅涔堝氨鍙互浣跨敤榪欎釜

lParam

銆銆锝嶏綋锝勶綆鏄繖涔堟弿榪扮殑Specifies the 32-bit value of the item

銆銆鎴戜笂嬈℃槸涓轟簡鍦ㄦ煇涓琛屽姞鍏ヤ竴涓俊鎭紝紿楀彛鍙ユ焺錛岀劧鍚庢槸榪欎箞鍔犵殑錛?/p>

銆銆int nIndex = m_listctrl.GetItemCount();

聽 LV_ITEM聽聽 lvitemAdd = {0};
聽 lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
聽 lvitemAdd.iItem = nIndex ;
聽 lvitemAdd.iSubItem = 0;
聽 lvitemAdd.pszText =_T("姣涙瘺1");;

聽 lvitemAdd.iImage = n;
聽 lvitemAdd.lParam = (LPARAM)hwnd;(鏌愪釜紿楀彛鐨勭獥鍙e彞鏌?


聽 if (m_listctrl.InsertItem(&lvitemAdd) != -1)
聽 {
聽聽 LV_ITEM lvitem = {0};
聽聽 lvitem.mask = LVIF_TEXT;
聽聽 lvitem.iItem = nIndex ;
聽聽 lvitem.iSubItem = 1;

聽聽 lvitem.pszText =_T("姣涙瘺2");
聽聽 m_listctrl.SetItem(&lvitem);
聽聽
聽 }

ok錛岃繖鏄竴涓瘮杈冨叏鐨勪緥瀛愮殑錛屽張鎻捍CON錛屽張浣跨敤PARAM鐨?/p>

鏉℃鍏錛氥鐐瑰嚮鍒楄〃妗嗭紝鑾峰彇閫変腑琛屼俊鎭?/p>

銆銆鍝嶅簲NM_CLICK娑堟伅錛屽鏋滀綘鏈塎SDN錛屽彲浠ョ湅鍒幫紝鏈変笓闂ㄥ叧浜巐istview鐨?/p>

NM_CLICK鐨勪粙緇?/p>

void CMyDlg::OnItemClick(NMHDR* pNMHDR, LRESULT* pResult)
{
聽// TODO: Add your control notification handler code here
聽int nItem = -1;

聽LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;

聽if(lpNMItemActivate != NULL)
聽{
聽聽聽聽 nItem = lpNMItemActivate->iItem;
聽}

}

鐜板湪nItem灝辨槸鐐瑰嚮閫変腑閭h鐨刬ndex浜嗭紝鏈変簡index錛岃幏鍙栭偅琛岀殑淇℃伅榪橀毦鍚?/p>

錛?/p>

鎳掓眽璇達細闅撅紝鍥犱負浣犺繕娌¤錛屾檿錛岄偅灝辯戶緇

鏉℃涓冿細銆鏍規嵁琛岀殑index錛岃幏鍙栬琛岀殑淇℃伅

銆鐩存帴涓婁唬鐮佸惂

銆LV_ITEM lvitem = {0};
聽聽 lvitem.iItem = nIndex;
聽聽 lvitem.iSubItem = 0;
聽聽 lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;

m_listctrl.GetItem(&lvitem)

榪欐牱錛屽氨鎶妌index,絎竴鍒楃殑淇℃伅鍙栧嚭鏉ヤ簡錛屽寘鎷垰鎵嶆垜浠姞鍏ョ殑ICON,鍜岄偅涓?/p>

棰濆淇℃伅錛堢獥鍙e彞鏌勶級錛?/p>

姣斿鎴戣鑾峰彇紿楀彛鍙ユ焺錛屽氨鍙互hwnd = (HWND)lvitem.lParam;

mask 鐢ㄦ潵鎸囨槑浣犳兂鑾峰彇閭d簺淇℃伅

鍏蜂綋鍙互鏌sdn涓璍VITEM Structure鐨勫畾涔夊拰CListCtrl::GetItem

鏉℃鍏細鐢ㄧ▼搴忛変腑鏌愪竴琛岋紝浣夸箣閫変腑

閫変腑涔嬨

m_listctrl.SetItemState

(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

涓嶉変腑錛屽彇娑堥変腑涔?/p>

m_listctrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);

鏉℃涔濓細鑾峰彇褰撳墠鎵鏈夐変腑鐨勮錛堝閫夛級

銆銆榪欎釜錛屼亢灝辨瘮杈冩噿浜嗭紝鎶刴sdn鐨勪唬鐮佸惂錛屽弽姝e緢綆鍗?/p>

銆銆

Example
// CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem

(IDC_YOURLISTCONTROL);
ASSERT(pListCtrl != NULL);

POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
聽聽 TRACE0("No items were selected!\n");
else
{
聽 while (pos)
聽 {
聽聽聽聽 int nItem = pList->GetNextSelectedItem(pos);
聽聽聽聽 TRACE1("Item %d was selected!\n", nItem);
聽聽聽聽 // you could do your own processing on nItem here
聽 }
}

鏉℃鍗侊細鍒犻櫎鏉℃涔濅腑閫変腑鐨勮

銆銆榪欎釜鐩稿鍓嶉潰涔濅釜鏉℃鏄瘮杈冮夯鐑︾殑錛屽洜涓哄鏋滀綘瑕佸垹闄ゅ琛岀殑璇濄傚線寰瑕佸嚭閿?/p>

銆銆姣斿錛屾垜鐜板湪瑕佸垹闄ょ0琛屽拰絎?琛岋紙鍒楄〃鐨勮搴忓垪鏄粠0寮濮嬬殑錛?/p>

銆銆閭d箞濂藉晩銆傛垜鏉ュ垹浜?/p>

銆銆m_listctrl.DeleteItem(0)

聽聽聽聽聽聽聽 m_listctrl.DeleteItem(1)

銆銆鎭枩浣狅紝閿欎簡錛屾垜濂藉紑蹇冨晩銆錛氾級

銆銆鍥犱負浣犲垹闄ょ0琛屼互鍚庯紝涓嬮潰鐨勮浼氬線涓婄Щ錛岄偅涔堝師鏉ョ殑絎?琛屽氨鍙樻垚浜嗙0琛岋紝閭d箞浣犲啀 m_listctrl.DeleteItem(1)錛岄偅涔堝垹闄ょ殑鏄師鏉ョ殑絎紥琛岋紝鐪熼夯鐑︼紝

銆銆銆鎵浠ワ紝鍙湁浠庝笅寰涓婂垹錛屾墠鏄畨鍏ㄧ殑錛屽厛鍒犵殑錛屼笉浼氬獎鍝嶅悗闈㈢殑鎿嶄綔錛?/p>

銆銆銆銆m_listctrl.DeleteItem(1)

聽聽聽聽聽聽聽 m_listctrl.DeleteItem(0)

銆銆浣嗘湁鏃跺欙紝鎴戜滑涔熶笉鐭ラ亾瑕佸垹闄ゅ摢浜涜錛屽彧鐭ラ亾瑕佸垹闄ら変腑鐨勯偅浜涜錛屽儚鏉℃涔濅腑鐨勯偅浜?/p>

銆銆銆濡傛灉鎴戜滑榪樻槸鐢?/p>

銆銆銆

POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
聽聽 TRACE0("No items were selected!\n");
else
{
聽 while (pos)
聽 {
聽聽聽聽 int nItem = m_listctrl.GetNextSelectedItem(pos);
聽聽聽聽

銆m_listctrl.DeleteItem(nItem );

聽 }
}

浣犲氨絳夌潃鏀跺案鍚?/p>

榪欐椂鍊欐垜浠氨瑕丅4寰蔣浜嗭紝涓鴻櫨綾蟲湪鏈塆etLastselectedItemPosition聽鍜孏etPrevSelectedItem

澶氬啓涓瀵規垚鍛樺嚱鏁頒細姝誨晩銆:(

銆娌″姙娉曪紝鍔炴硶鑷繁鎯籌紝榪欓噷鏈変釜絎ㄥ姙娉?/p>

銆POSITION聽 sSelPos = NULL;

聽while(sSelPos = m_listctrl.GetFirstSelectedItemPosition())
聽{
聽聽聽聽聽聽 聽int nSelItem = -1;
聽聽聽聽聽聽聽 聽nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);

聽聽聽聽聽聽聽聽 if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount())
聽聽聽聽聽 聽{

聽聽聽聽聽聽聽聽聽聽聽聽 濂戒簡錛岃繖涓猲SelItem 灝辨槸鎴戜滑瑕佺殑DD

聽聽聽聽聽 }

}

GetNextSelectedItem榪欎釜鍑芥暟錛岀湅msdn鐨勭敤娉曪紝鍏跺疄鏄繑鍥炵涓涓殑index錛岀劧鍚庤蛋鍒頒笅涓涓変腑鐨勮鍘伙紝鎵浠ヨ繖涔堝仛涔熸槸瀹夊叏鐨勶紝鍦ㄥ疄闄呬腑錛屼亢涔熸槸榪欎箞鍋氱殑錛屾祴璇曚篃閫氳繃錛屾病闂鐨?/p>

褰撶劧錛岃繕鏈変釜鍔炴硶錛屽厛閫氳繃GetFirstSelectedItemPosition鍜孏etNextSelectedItem

鏉ヨ幏鍙栨墍鏈夌殑閫変腑琛岀殑index錛岀劧鍚庢妸榪欎簺index鏀懼埌涓涓暟緇勯噷錛岀劧鍚庡啀浠庝笅寰涓婂垹

鍞夌湡楹葷儲鍟婏紝榪樿涓嶅畾鏁扮粍錛屼笉璇寸敤new鍦ㄥ爢涓婂紑鍚э紝閭d箞涓涓獀ector鎬繪槸瑕佺殑鍚э紝楹葷儲鍟?/p>

鎵浠ユ垜鏆傛椂鏄敤涓婅堪鐨勫姙娉曟潵鍒犻櫎錛屼篃渚涘ぇ瀹跺弬鑰冿紝甯屾湜鑳芥壘鍒版洿濂界殑鍔炴硶銆?/p>

濂戒簡錛屼粖澶╁氨鏆傛椂鍏堟暣鐞嗕笂榪板崄鐐廣俵istctrl鍏朵粬楂樼駭鐨勭敤娉曪紝緗戜笂璧勬枡涔熷緢澶氾紝鎴戜篃鏆傛椂涓嶆葷粨錛屼互鍚庢湁鏈轟細鍐嶈鍚с?/p>

鎼炰簡濂介暱鏃墮棿鍟婏紝瑕佺潯瑙夊幓浜嗭紝绱浜嗐錛氾級



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=662462

[鐐瑰嚮姝ゅ鏀惰棌鏈枃]聽聽 姣涙瘺鍙戣〃浜?2006騫?4鏈?3鏃?23:32:00

PPG聽鍙戣〃浜?006-04-14 22:50:00聽聽IP: 222.94.6.*
濂芥枃绔狅紝鏀惰棌涓涓?/div>

yyh9186聽鍙戣〃浜?006-06-20 17:11:00聽聽IP: 221.122.51.*
鎮ㄥソ錛屾垜鏈榪戦亣鍒頒釜闅劇紶鐨勯棶棰橈紝鐪嬩簡鎮ㄧ殑鏂囩珷鍚庯紝鎴戞兂鎮ㄥ湪listctrl鏂歸潰涓瀹氫簡瑙e緢閫忓交錛屽笇鏈涙偍鑳藉府鎴戣В鍐寵繖涓棶棰樸傛弿榪板涓嬶細listctrl鐨勬墭閫夊姛鑳斤紝綾諱技浜巜indows鎵橀夊姛鑳姐傛垜鍒嗘瀽鍒嗕負涓ょ鎯呭喌錛?1)鎸変綇榧犳爣宸﹂敭榪涜鎵橀夛紱(2)鎸変綇榧犳爣宸﹂敭錛屽茍鎸変笅ctrl閿繘琛屾墭閫夈?
榪欎釜闂鎴戣嚜宸卞疄鍦ㄦ槸鎼炰笉瀹氫簡錛屽笇鏈涢珮鎵嬫偍緇欏嚭浠g爜錛屾垜鐨勯偖綆?
yyh9186@163.com錛沵sn:yyh9186@hotmail.com

姣涙瘺聽鍙戣〃浜?006-06-21 10:38:00聽聽IP: 218.4.149.*
鎵橀夋槸浠涔堬紝澶氶夊悧錛燂紵鏅?

鐜板湪鐨刲istctrl錛屽鏋滈夋嫨閭d釜澶氶夌殑灞炴э紙鎺т歡灞炴ч噷鏈夛級錛岄偅涔堝氨鏄紱(2)鎸変綇榧犳爣宸﹂敭錛屽茍鎸変笅ctrl閿繘琛屽閫夈?

濡傛灉浣犳兂鍙槸宸﹂敭澶氶夛紝閭d箞
鑷繁妯℃嫙鐨?棣栧厛鍒ゆ柇榧犳爣宸﹂敭鍗曞嚮鍦ㄤ簡listCtrl閲岄潰,鐒跺悗灝辨埅鑾瘋繖涓秷鎭?淇敼娑堟伅鍙傛暟
WM_LBUTTONDOWN

WPARAM wParam
LPARAM lParam;
wParam
MK_CONTROL
The CTRL key is down.
wParam=MK_CONTROL
鐒跺悗緇х畫浼犻掕繖涓秷鎭氨寰椾簡

淇烘病璇曡繃錛?鐭ラ亾琛屼笉琛?/div>


]]>CRichEditCtrl 瓚呮枃鏈紪杈?/title><link>http://m.shnenglu.com/microli/articles/11482.html</link><dc:creator>閾佽闊?/dc:creator><author>閾佽闊?/author><pubDate>Sun, 20 Aug 2006 03:20:00 GMT</pubDate><guid>http://m.shnenglu.com/microli/articles/11482.html</guid><description><![CDATA[ <p align="center"> <span style="FONT-WEIGHT: bold; FONT-SIZE: 18px; FONT-FAMILY: Verdana" align="center">CRichEditCtrl 瓚呮枃鏈紪杈戯紙MSN/QQ甯哥敤鎺т歡錛?/span> </p> <p align="center">owg 杞嚜錛峷cmute 錛?005-9-9 13:48:00錛?br /><br />//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p> <p> <font color="#008000"> <b>涓.甯歌闂<br /></b> <br />a.鍙互緙栬瘧,涓嶈兘鎵ц鐨?/font> <br />AfxInitRichEdit();<br /><br /><font color="#008000">b.鍗囩駭榛樿鐨凴iched鐗堟湰(榛樿鐨勬湁涓浜沚ug)</font>錛屽鍙湪InitInstance涓坊鍔燣oadLibrary("RICHED20.DLL") 鏈鍚庢敞鎰?FreeLibrary<br /><br />濡傛灉鏄疌RichEditView鍩虹被鐨勫彲鐢?br />BOOL CXXXXXXView::PreCreateWindow(CREATESTRUCT& cs)<br />{<br />聽聽聽 //瑁呭叆rich edit version 2.0<br />聽聽聽 if (LoadLibraryA("RICHED20.DLL") == NULL)<br />聽聽聽聽 { <br />聽聽聽聽聽聽聽 AfxMessageBox(_T("Fail to load \"riched20.dll\"."),MB_OK | MB_ICONERROR);<br />聽聽聽聽聽聽聽 PostMessage(WM_QUIT,0,0);<br />聽聽聽聽聽聽聽 return FALSE;<br />聽聽聽聽聽聽 }<br /><br />聽聽聽聽聽聽 m_strClass = RICHEDIT_CLASSA;//for 2.0 class<br /><br />聽聽聽聽聽聽 return CRichEditView::PreCreateWindow(cs);<br />}<br /><br /><font color="#008000">c.鏈鍚庤拷鍔犺</font><br />richeditctrl.SetSel(-1, -1);<br />richeditctrl.ReplaceSel( (LPCTSTR)str );<br /><br /><font color="#008000">d.瀛楁暟闄愬埗</font><br />CRichEditCtrl::LimitText(long nChars)<br /><br /><font color="#008000">e.鎹㈣鍒囨崲<br /></font><br />CRichEditView鐨凮nInitialUpdate()鍑芥暟涓姞鍏ヤ笅闈袱鍙ワ細<br />m_nWordWrap = WrapNone;<br />WrapChanged(); <br />WrapChanged瀹為檯涓婁篃鏄皟鐢?br />ctrl.SetTargetDevice(NULL, 1); <font color="#008000">//m_nWordWrap == WrapNone</font><br />ctrl.SetTargetDevice(NULL, 0);<font color="#008000"> //m_nWordWrap == WrapToWindow</font><br />榪樻湁涓嶅父鐢ㄧ殑 m_nWordWrap == WrapToTargetDevice<br />ctrl.SetTargetDevice(m_dcTarget, GetPrintWidth());<br />濡傛灉鏄湪Dialog涓紝鍙嬌鐢⊿etTargetDevice錛屾敞鎰忓湪灞炴ч噷闈㈠姞涓妛ant return<br /><br /><font color="#008000">f.鏈夋椂鍊欎笉甯屾湜甯︽牸寮忕殑鏁版嵁綺樿創錛屽彲閫氳繃PasteSpecial閫夋嫨鎬х矘璐?/font><br />pmyRichEditCtrl->PasteSpecial(CF_TEXT);<br /><br /><font color="#008000">g.闅忕潃杈撳叆闅忕潃鑷姩婊氬姩鏉℃粴鍔ㄥ埌鏈鍚庝竴琛?/font><br />int nFirstVisible = pmyRichEditCtrl->GetFirstVisibleLine();<br />if (nFirstVisible > 0)<br />{<br />聽聽聽 pmyRichEditCtrl->LineScroll(-nFirstVisible, 0);<br />}<br />鎴?br />m_cRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM,0);<br /><br /><br /><font color="#008000">h.璁劇疆UNDO鐨勬鏁?鍙兘鐢ㄥ湪RICHED20浠ヤ笂錛屽嵆榛樿涓嶆敮鎸侊紝蹇呴』鍗囩駭)</font><br />SendMessage(EM_SETTEXTMODE,TM_MULTILEVELUNDO,0);<br />TM_MULTILEVELUNDO 鏀寔澶氬彇娑?榛樿鍊?.鍙氳繃EM_SETUNDOLIMIT璁劇疆鏈澶ф鏁?<br />SendMessage(EM_SETUNDOLIMIT,100,0);<br /><br /><font color="#008000">i.鍝嶅簲OnChange</font><br />EM_SETEVENTMASK 璁劇疆 ENM_CHANGE <br />long lMask = GetEventMask();<br />lMask |= ENM_CHANGE;<br />lMask &= ~ENM_PROTECTED;<br />SetEventMask(lMask);<br /><br /><font color="#008000">j.璁劇疆鍙</font><br />CRichEditCtrl::SetReadOnly( BOOL bReadOnly = TRUE );<br />閫氳繃璁劇疆PROTECTED瀹炵幇閫変腑鐨勬枃鏈彧璇伙紝鍙傝<br />http://www.codeguru.com/Cpp/controls/richedit/article.php/c2401/<br /><br /><b><font color="#008000">浜?鍑芥暟搴旂敤<br /></font></b><br /><font color="#008000">a.璁劇疆瀛椾綋錛堜富瑕佹槸閫氳繃SetSelectionCharFormat錛?br /></font><br />CHARFORMAT cf;<br /><br />rich.GetSelectionCharFormat(cf);<br /><br />cf.dwMask|=CFM_BOLD;<br /><br />cf.dwEffects|=CFE_BOLD;<font color="#008000">//璁劇疆綺椾綋錛屽彇娑堢敤cf.dwEffects&=~CFE_BOLD;</font><br /><br />cf.dwMask|=CFM_ITALIC;<br /><br />cf.dwEffects|=CFE_ITALIC;<font color="#008000">//璁劇疆鏂滀綋錛屽彇娑堢敤cf.dwEffects&=~CFE_ITALIC;</font><br /><br />cf.dwMask|=CFM_UNDERLINE;<br /><br />cf.dwEffects|=CFE_UNDERLINE;<font color="#008000">//璁劇疆鏂滀綋錛屽彇娑堢敤cf.dwEffects&=~CFE_UNDERLINE;<br /></font><br />cf.dwMask|=CFM_COLOR;<br /><br />cf.crTextColor = RGB(255,0,0);<font color="#008000">//璁劇疆棰滆壊<br /></font><br />cf.dwMask|=CFM_SIZE;<br /><br />cf.yHeight =200;<font color="#008000">//璁劇疆楂樺害<br /></font><br />cf.dwMask|=CFM_FACE;<br /><br />strcpy(cf.szFaceName ,_T("闅朵功"));<font color="#008000">//璁劇疆瀛椾綋</font><br /><br />rich.SetSelectionCharFormat(cf);<br /><br /><font color="#008000">b.璁劇疆瀛椾綋鐨勮闂磋窛<br /></font><br />瑕佺敤richedit2.0浠ヤ笂璇曡瘯<br /><br />PARAFORMAT2 pf;<br />pf.cbSize = sizeof(PARAFORMAT2);<br />pf.dwMask = PFM_NUMBERING | PFM_OFFSET;<br />pf.wNumbering = PFN_BULLET;//娉ㄦ剰PFM_NUMBERING <br />pf.dxOffset = 10;<br />VERIFY(SetParaFormat(pf)); <br /><br />甯哥敤鐨刣wMask鏈?br /><br />1 PFM_NUMBERING 鎴愬憳 wNumbering 鎵嶈搗浣滅敤錛岄」鐩鍙鳳紝榛樿鐢≒FN_BULLET<br />2 浣跨敤闃挎媺浼暟瀛?(1, 2, 3, ...). <br />3 浣跨敤灝忓啓瀛楁瘝 (a, b, c, ...). <br />4 浣跨敤澶у啓瀛楁瘝 (A, B, C, ...). <br />5 浣跨敤灝忓啓緗楅┈鏁板瓧 (i, ii, iii, ...). <br />6 浣跨敤澶у啓緗楅┈鏁板瓧 (I, II, III, ...). <br />7 鑷畾涔夛紝瀛楃瑙佹垚鍛?wNumberingStart. <br />PFM_OFFSET 鎴愬憳 dxOffset 鎵嶈搗浣滅敤錛岀緝榪涳紝鍗曚綅twips<br />PFM_STARTINDENT 鎴愬憳 dxStartIndent 鎵嶈搗浣滅敤錛岄琛岀緝榪?br />PFM_SPACEAFTER 鎴愬憳 dySpaceAfter 鎵嶈搗浣滅敤錛屾闂磋窛<br />PFM_LINESPACING 鎴愬憳 dyLineSpacing 鎵嶈搗浣滅敤錛岃闂磋窛<br /><font color="#008000"><br />c.璁劇疆CRichEditCtrl(2.0)鑳屾櫙閫忔槑 </font><br />long style = ::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);<br />style &= WS_EX_TRANSPARENT;<br />::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style);<br />鎴?CreateEx錛岀劧鍚庢妸WS_EX_TRANSPARENT鏍峰紡鍔犱笂<br /><br /><font color="#008000">e.寰楀埌鍐呭鏈変笁縐?/font><br /><br />1)GetWindowText<br /><br />2)浣跨敤EM_GETTEXTEX<br /><br />GETTEXTEX gt;<br /><br />gt.cb = 200;<br /><br />gt.flags = GT_DEFAULT;<br /><br />gt.codepage = CP_ACP ;<br /><br />gt.lpDefaultChar = NULL; <br /><br />gt.lpUsedDefChar = NULL;<br /><br />SendMessage(EM_GETTEXTEX,(WPARAM)&gt,(LPARAM)text);</p> <p> <br />3)StreamOut(涓昏鐢ㄤ簬RTF絳夋牸寮忚緭鍑?<br /><br />static DWORD CALLBACK <br />MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)<br />{<br />聽聽聽 CFile* pFile = (CFile*) dwCookie;<br /><br />聽聽聽 pFile->Write(pbBuff, cb);<br /><br />聽聽聽 *pcb = cb;<br /><br />聽聽聽 return 0;<br />}<br /><br /><br />CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);<br /><br />EDITSTREAM es;<br /><br />es.dwCookie = (DWORD) &cFile;<font color="#008000">//璁劇疆鐢ㄤ緥鍙傛暟,浠ヤ究鍥炶皟鍑芥暟璋冪敤</font><br /><br />es.pfnCallback = MyStreamOutCallback; <br /><br />pmyRichEditCtrl->StreamOut(SF_RTF, es);<br /><br />璇誨叆鍙互姝ょ被鎺紝SetWindowText,EM_SETTEXTEX,StreamIn<br /><font color="#008000"><br />f.鏌ユ壘瀛楃涓?br /></font><br />FINDTEXTEX ft;<br />ft.chrg.cpMin = 0;<br />ft.chrg.cpMax = -1;<br />ft.lpstrText = "|";<br />long lPos = FindText(0, &ft);<br /><br />濡傛灉瑕佺戶緇煡鎵撅紝淇敼cpMin,濡?br />int nCount = 0;<br />do<br />{<br />聽聽 long lPos = GetRichEditCtrl().FindText(0, &ft);<br />聽聽 if( -1 == lPos) break;<br />聽聽 ft.chrg.cpMin = lPos + strlen(ft.lpstrText);<br />聽聽 ++nCount;<br />}while(TRUE);<br /><font color="#008000"><br />g.浠tml鏍煎紡淇濆瓨<br /></font><br />鐩墠鍋氭硶鍙厛杞負RTF鏍煎紡錛屽啀閫氳繃RTF-to-HTML Converter<br />http://www.codeguru.com/Cpp/controls/richedit/conversions/article.php/c5377/<br /><br /><font color="#008000">h.閲嶈澆OnProtected鍑芥暟寰楀埌瀵瑰簲鐨勬秷鎭紝濡傜矘璐寸瓑</font><br />void CMYichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)<br />{<br />聽聽 ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;<br /><br />聽聽 switch (pEP->msg) {<br />聽聽 case WM_KEYDOWN://鎸夐敭錛屽垽鏂璸EP->wParam<br />聽聽 case WM_PASTE://綺樿創<br />聽聽 case WM_CUT://鍓垏<br />聽聽 case EM_SETCHARFORMAT:<br />聽聽 default:<br />聽聽 break;<br />};<br /><br />*pResult = FALSE;<br />}<br /><br /><font color="#008000"><b>涓?鑱婂ぉ甯哥敤 <br /></b></font><br /><font color="#008000">a.LINK 閾炬帴鍔熻兘<br /></font><br />1. LoadLibrary(_T("Riched20.dll"));<br /><br />2. 鍒涘緩RichEdit2.0鎺т歡<br /><br />CreateEx(0, _T("RichEdit20A"), NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP<br />|ES_READONLY|ES_WANTRETURN|ES_MULTILINE,<br />rect.left, rect.top, cx, cy,<br />pParentWnd->m_hWnd, (HMENU)nID, NULL);<br /><br />3. 璁懼畾閫変腑鐨勬枃瀛椾負閾炬帴鏄劇ず<br />CHARFORMAT2 cf2;<br />ZeroMemory(&cf2, sizeof(CHARFORMAT2));//<br />cf2.cbSize = sizeof(CHARFORMAT2);<br />cf2.dwMask = CFM_LINK;<br />cf2.dwEffects |= CFE_LINK;<br />m_cRichEdit.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);<br /><br />4.鏀寔閾炬帴鐨勭偣鍑誨搷搴?br />m_cRichEdit.SetEventMask(ENM_LINK);<br /><br />5.鍝嶅簲閾炬帴鐨勭偣鍑籈N_LINK<br />BEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)<br />ON_NOTIFY_REFLECT(EN_LINK,OnURL)<br />END_MESSAGE_MAP()<br />......<br /><br />void CMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult)<br />{<br />聽聽聽 TCHAR LinkChar[512];<br />聽聽聽 ENLINK *pLink = (ENLINK *)pNmhdr;<br />聽聽聽 if (pLink->msg == WM_LBUTTONUP)<br />聽聽聽 {<br />聽聽聽聽聽聽聽 SetSel(penLink->chrg);<font color="#008000">//榪欐槸閾炬帴鐨勬枃瀛楄寖鍥?/font><br />聽聽聽聽聽聽聽 long Res = GetSelText((char *)LinkChar);<font color="#008000">//榪欐槸閾炬帴鏂囧瓧</font><br />聽聽聽聽聽聽 <font color="#008000">聽//鍚庨潰鏄綘鐨勫鐞嗚繃紼?/font><br />聽聽聽聽聽聽聽 ......<br />聽聽聽聽 }<br />}<br /><br /><font color="#008000">b.鎻掑叆浣嶅浘</font><br />http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/<br />http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/<br /><br />鑷畾涔夊湪RichEdit涓彃鍏ュ璞$殑鍥炬爣<br />http://www.blogcn.com/user3/jiangsheng/blog/1319738.html<br />鏂規硶鍩烘湰鍚孠nowledge Base鏂囩珷Q220844 HOWTO: Insert a Bitmap Into an RTF Document Using the RichEdit Control<br />鍙槸鍦ㄦ渶鍚庢彃鍏ヤ箣鍓嶈皟鐢ㄤ竴涓婭OleCache::SetData,鐢ㄤ竴涓狧GLOBAL浣滀負鍙傛暟錛孒GLOBAL閲岄潰鐨勬暟鎹槸涓涓狹ETAFILEPICT緇撴瀯錛屽寘鍚嚜宸辨彁渚涚殑鍥劇墖<br /><br />浣跨敤CRichEditView::InsertFileAsObject灝卞彲浠ユ彃鍏ュ浘鍍忋俈C++甯︽湁涓涓緥瀛怶ordPad銆?br />鍙﹀鍙互鍙傝冣淚nsert any HBITMAP (Bitmap) in your RichEdit Control鈥?http://www.codeguru.com/richedit/richeditrc.html)銆?<br /><font color="#008000"><br />c.鏄劇ずGIF鍔ㄧ敾</font><br />甯哥敤鐨勬槸閫氳繃qq鐨刬mageole.dll(涔熸湁鐢℅if89.dll鐨?<br />http://www.xiaozhou.net/cooldog/blogview.asp?logID=82<br />http://www.codeproject.com/richedit/AnimatedEmoticon.asp<br /><br />鍦╮ichedit鎺т歡涓彃鍏ュ姩鎬丟IF (Native C++鐗?<br />http://blog.joycode.com/jiangsheng/archive/2004/12/15/41209.aspx<br /><br />d.IRichEditOleCallback鐨勪嬌鐢?br />http://61.186.252.131/Expert/topic/905/905844.xml?temp=.8379022<br /><br />綾諱技 MSN 淇℃伅鍙戦佹鐨勫埗浣?涓?<br />http://www.vckbase.com/document/viewdoc/?id=1087<br />鍐呭鍖呭惈錛氬疄鐜板彸閿彍鍗曪紝鍥劇墖鎻掑叆錛岃鍙?鍐欏叆RTF鏍煎紡瀛楃涓?br /><br />鑷畾涔?CRichEditCtrl 鎺т歡<br />http://www.vckbase.com/document/viewdoc/?id=328<br />鍐呭鍖呭惈錛氶紶鏍囧彸閿秷鎭紝娑堟伅鏄犲皠錛屽瓧浣撳彉鎹?br /><br />PS.richedit鎺т歡鍗囩駭鍒?.0鍚庯紝鍏堟妸瀛椾綋璁句負妤蜂綋錛岃緭鍏ユ眽瀛楁病鏈夐棶棰橈紝浣嗚緭鍏ュ瓧姣嶆椂錛屽瓧姣嶈嚜鍔ㄨ煩杞負Arial瀛椾綋錛岃?.0鍗存病鏈夎繖涓枃棰橈紝浠嶇劧鏄敤妤蜂綋鏄劇ず瀛楁瘝<br />鏄竴涓笓闂ㄧ殑璁捐 Dual-font, Smart font apply, 鍙傝 http://61.186.252.131/Expert/topic/913/913807.xml?temp=.3753778 <br />----------------------<br />姣旀垜鎯寵薄涓繕瑕佽姳鏃墮棿錛屾墍浠ユ渶鍚庢濺鑽変簡鐐癸紝瑙佽皡</p> <br /> <img src ="http://m.shnenglu.com/microli/aggbug/11482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/microli/" target="_blank">閾佽闊?/a> 2006-08-20 11:20 <a href="http://m.shnenglu.com/microli/articles/11482.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆愬師銆慍Edit & CRichEdit 浣跨敤鎶宸?/title><link>http://m.shnenglu.com/microli/articles/11472.html</link><dc:creator>閾佽闊?/dc:creator><author>閾佽闊?/author><pubDate>Sat, 19 Aug 2006 16:34:00 GMT</pubDate><guid>http://m.shnenglu.com/microli/articles/11472.html</guid><description><![CDATA[銆愬師銆慍Edit & CRichEdit 浣跨敤鎶宸?br />浣滆咃細lixiaosan<br />鏃ユ湡錛?4/07/2006<br /><br /><br />娉細<br />聽聽聽聽聽聽聽 m_edit1浠h〃ID涓篒DC_EDIT1鐨凜Edit鎺т歡鐨刢ontrol綾誨瀷鐨勫彉閲?br />聽聽聽聽聽聽聽 m_richedit1浠h〃ID涓篒DC_RICHEDIT1鐨凜RichEditCtrl鎺т歡鐨刢ontrol綾誨瀷鐨勫彉閲?br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">1.璁劇疆edit鍙灞炴?br /><br /></span>聽聽聽 鏂規硶涓錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 m_edit1.SetReadOnly(TRUE);<br />聽聽聽 鏂規硶浜岋細<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">2.鍒ゆ柇edit涓厜鏍囩姸鎬佸茍寰楀埌閫変腑鍐呭(richedit鍚屾牱閫傜敤)<br /><br /></span>聽聽聽聽聽聽聽 int nStart, nEnd;<br />聽聽聽聽聽聽聽 CString strTemp;<br /><br />聽聽聽聽聽聽聽 m_edit1.GetSel(nStart, nEnd);<br />聽聽聽聽聽聽聽 if(nStart == nEnd)<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 strTemp.Format(_T("鍏夋爣鍦?d"), nStart);<br />聽聽聽聽聽聽聽聽聽聽聽 AfxMessageBox(strTemp);<br />聽聽聽聽聽聽聽 }<br />聽聽聽聽聽聽聽 else<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 //寰楀埌edit閫変腑鐨勫唴瀹孤犅犅犅?<br />聽聽聽聽聽聽聽聽聽聽聽 m_edit1.GetWindowText(strTemp);<br />聽聽聽聽聽聽聽聽聽聽聽 strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);<br />聽聽聽聽聽聽聽聽聽聽聽 AfxMessageBox(strTemp); <br />聽聽聽聽聽聽聽 }<br />聽聽聽 娉細GetSel鍚庯紝濡傛灉nStart鍜宯End錛岃〃鏄庡厜鏍囧浜庢煇涓綅緗紙鐩磋鏉ョ湅灝辨槸鍏夋爣鍦ㄩ棯鍔級錛?br />聽聽聽聽聽聽聽聽聽聽聽聽 濡傛灉nStart鍜宯End涓嶇浉絳夛紝琛ㄦ槑鐢ㄦ埛鍦╡dit涓変腑浜嗕竴孌靛唴瀹廣?br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">3.鍦╡dit鏈鍚庢坊鍔犲瓧絎︿覆<br /><br /></span>聽聽聽聽聽聽聽 CString str;<br />聽聽聽聽聽聽聽 m_edit1.SetSel(-1, -1);<br />聽聽聽聽聽聽聽 m_edit1.ReplaceSel(str);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">4.闅忚緭鍏ヨ嚜鍔ㄦ粴鍔ㄥ埌鏈鍚庝竴琛?richedit鍚屾牱閫傜敤)<br /><br /></span>聽聽聽 鏂規硶涓錛氾紙鎽樿嚜msdn錛?br />聽聽聽聽聽聽聽 // The pointer to my edit.<br />聽聽聽聽聽聽聽 extern CEdit* pmyEdit;<br />聽聽聽聽聽聽聽 int nFirstVisible = pmyEdit->GetFirstVisibleLine();<br /><br />聽聽聽聽聽聽聽 // Scroll the edit control so that the first visible line<br />聽聽聽聽聽聽聽 // is the first line of text.<br />聽聽聽聽聽聽聽 if (nFirstVisible > 0)<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 pmyEdit->LineScroll(-nFirstVisible, 0);<br />聽聽聽聽聽聽聽 }<br />聽聽聽 鏂規硶浜岋細<br />聽聽聽聽聽聽聽 m_richedit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">5.濡備綍闄愬埗edit杈撳叆鎸囧畾瀛楃<br /><br /></span>聽聽 鍙互浠嶤Edit媧劇敓涓涓被錛屾坊鍔燱M_CHAR娑堟伅鏄犲皠銆備笅闈竴涓緥瀛愬疄鐜頒簡闄愬畾杈撳叆16榪涘埗瀛楃鐨勫姛鑳姐?br /><br />聽聽 void CMyHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)聽 <br />聽聽 { <br />聽聽聽聽聽聽聽 if ( (nChar >= '0' && nChar <= '9') || <br />聽聽聽 聽聽聽聽聽聽聽聽 (nChar >= 'a' && nChar <= 'f') || <br />聽聽聽 聽聽聽聽 聽 聽 (nChar >= 'A' && nChar <= 'F') || <br />聽聽聽 聽聽聽聽聽聽聽聽聽 nChar == VK_BACK ||聽 <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 nChar == VK_DELETE)聽聽聽 //msdn鐨剉irtual key<br />聽聽聽聽聽聽 { <br />聽聽聽 聽聽聽聽聽聽聽 CEdit::OnChar(nChar, nRepCnt, nFlags); <br />聽聽聽聽聽聽聽 }聽聽聽 聽<br />聽聽 }<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">6.濡備綍浣跨敤richedit<br /><br /></span>聽聽聽 娣誨姞AfxInitRichEdit();<br />聽聽聽聽聽聽 CxxxApp::InitInstance()<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽聽 AfxInitRichEdit();<br />聽聽聽聽聽聽聽聽聽 .............<br />聽聽聽聽聽聽 }<br /><br />聽聽 AfxInitRichEdit()鍔熻兘錛氳杞?RichEdit 1.0 Control (RICHED32.DLL).<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">7.濡備綍浣跨敤richedit2.0 or richedit3.0<br /><br /></span>聽聽聽 浣跨敤鍘熷洜錛氱敱浜嶳ichEdit2.0A鑷姩涓哄瀛楃錛圵ideChar錛夛紝鎵浠ュ畠鍙互瑙e喅涓枃涔辯爜浠ュ強涓浜涙眽瀛楅棶棰?br /><br />聽聽聽 鏂規硶涓錛氾紙msdn涓婄殑鍋氭硶錛岄傜敤浜庣敤VC.NET鍙婁互鍚庣増鏈垱寤虹殑宸ョ▼錛?br />聽聽聽聽聽聽聽聽聽聽聽 To update rich edit controls in existing Visual C++ applications to version 2.0,<br />聽聽聽 聽聽聽 聽聽聽 open the .RC file as text, change the class name of each rich edit control from聽聽 "RICHEDIT" to聽 "RichEdit20a". <br />聽聽聽 聽聽聽 聽聽聽 Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.<br />聽聽聽 鏂規硶浜岋細浠ュ璇濇涓轟緥錛?br />聽聽聽聽聽聽 (1)聽聽聽 澧炲姞涓鍏ㄥ眬鍙橀噺 HMODULE hMod;<br />聽聽聽聽聽聽 (2)聽聽聽 鍦–xxxApp::InitInstance()涓坊鍔犱竴鍙Mod = LoadLibrary(_T("riched20.dll"));<br />聽聽聽 聽聽聽 聽聽聽 聽 鍦–xxxApp::ExitInstance()涓坊鍔犱竴鍙reeLibrary(hMod);<br />聽聽聽 聽聽 (3)聽聽聽 聽 鍦ㄥ璇濇涓婃斁涓涓猺ichedit錛屾枃鏈柟寮忔墦寮.rc鏂囦歡淇敼璇ichedit鎺т歡鐨勭被鍚?RICHEDIT" to聽 "RichEdit20a".<br />聽聽聽 聽聽 (4)聽聽聽 聽 鍦ㄥ璇濇澶存枃浠舵坊鍔?CRichEditCtrl m_richedit;<br />聽聽聽 聽聽聽 聽聽聽 聽 鍦∣nInitDialog涓坊鍔?m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">8.鏀瑰彉richedit鎸囧畾鍖哄煙鐨勯鑹插強瀛椾綋<br /><br /></span>聽聽聽聽聽聽聽 CHARFORMAT cf;<br />聽聽聽 聽聽聽 ZeroMemory(&cf, sizeof(CHARFORMAT));<br />聽聽聽聽聽聽聽 cf.cbSize = sizeof(CHARFORMAT);<br />聽聽聽聽聽聽聽 cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;<br />聽聽聽聽聽聽聽 cf.dwEffects = 0;<br />聽聽聽聽聽聽聽 cf.yHeight = 12*12;//鏂囧瓧楂樺害<br />聽聽聽聽聽聽聽 cf.crTextColor = RGB(200, 100, 255); //鏂囧瓧棰滆壊<br />聽聽聽聽聽聽聽 strcpy(cf.szFaceName ,_T("闅朵功"));//璁劇疆瀛椾綋<br />聽聽聽聽 <br />聽聽聽聽聽聽聽 m_richedit1.SetSel(1, 5); //璁劇疆澶勭悊鍖哄煙<br />聽聽聽聽聽聽聽 m_richedit1.SetSelectionCharFormat(cf);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">9.璁劇疆琛岄棿璺濓紙鍙傜敤浜巖ichedit2.0錛?br /><br /></span>聽聽聽聽聽聽聽 PARAFORMAT2 pf;<br />聽聽聽聽聽聽聽 pf2.cbSize = sizeof(PARAFORMAT2);<br />聽聽聽聽聽聽聽 pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;<br />聽聽聽聽聽聽聽 pf2.dyLineSpacing = 200;<br />聽聽聽聽聽聽聽 pf2.bLineSpacingRule聽 = 4;<br />聽聽聽聽聽聽聽 m_richedit.SetParaFormat(pf2);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">10.richedit鎻掑叆浣嶅浘<br /><br /></span>Q220844錛欻ow to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0<br /><a >http://support.microsoft.com/default.aspx?scid=kb;en-us;220844</a><br /><a >http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/</a><br /><a >http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">11.richedit鎻掑叆gif鍔ㄧ敾<br /><a ><br /></a></span><a href="javascript:void(0);/*1144809701660*/">http://www.codeproject.com/richedit/AnimatedEmoticon.asp</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">12.richedit宓屽叆ole瀵硅薄<br /><br /></span><a >http://support.microsoft.com/kb/141549/en-us</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">13.浣縭ichedit閫変腑鍐呭鍙<br /><br /></span><a >http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">14.鎵撳嵃richedit</span><span style="COLOR: rgb(0,0,0)"><br /><br /><a >http://www.protext.com/MFC/RichEdit3.htm</a></span><br /><a ><span style="COLOR: rgb(0,0,0)"></span></a><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">15.richeidt鐢ㄤ簬鑱婂ぉ娑堟伅紿楀彛<br /><br /></span><a >http://www.vckbase.com/document/viewdoc/?id=1087</a><br /><a >http://www.codeproject.com/richedit/chatrichedit.asp</a><br /><a >http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">16.瑙e喅richedit鐨凟N_SETFOCUS鍜孍N_KILLFOCUS鏃犲搷搴旂殑闂<br /><br /></span><a >http://support.microsoft.com/kb/181664/en-us</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">17.richedit鎷煎啓媯鏌?br /><br /></span><a >http://www.codeproject.com/com/AutoSpellCheck.asp</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">18.鏀瑰彉edit鑳屾櫙鑹?br /><br /></span>Q117778錛欻ow to change the background color of an MFC edit control<br /><a >http://support.microsoft.com/kb/117778/en-us</a><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">19.褰揺dit鎺т歡鐨勭埗紿楀彛灞炴ф槸甯︽爣棰樻爮WS_CAPTION鍜屽瓙紿楀彛WS_CHILD鏃訛紝涓嶈兘璁劇疆鐒︾偣SetFocus<br /><br /></span>Q230587錛歅RB: Can't Set Focus to an Edit Control When its Parent Is an Inactive Captioned Child Window<br style="COLOR: rgb(153,51,0)" /><span style="COLOR: rgb(153,51,0)"><a ><span style="COLOR: rgb(153,51,0)">http://support.microsoft.com/kb/230587/en-us</span><br style="COLOR: rgb(153,51,0)" /></a></span><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">20. 鍦‥dit涓洖杞︽椂錛屼細閫鍑哄璇濇聽 </span><br /><br />閫変腑Edit鐨勯鏍糤ant Return銆?br /><br />MSDN鐨勮В閲婂涓嬶細<br /><font size="+0"><font face="verdana,arial,helvetica" size="2"><strong>ES_WANTRETURN</strong>聽聽聽Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog box's default pushbutton. This style has no effect on a single-line edit control.<br /><br /></font></font><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">21. 鍔ㄦ佸垱寤虹殑edit娌℃湁杈規鐨勯棶棰?/span><br /><br />聽聽聽 m_edit.Create(....);<br />聽聽聽 m_edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);<br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><span style="COLOR: rgb(153,51,0)">22. 涓涓兘鏄劇ずRTF錛宱le錛堝寘鎷琯if錛?wmv錛宔xcel 錛宲pt錛夌殑渚嬪瓙</span><br /><br /><a >http://www.codeproject.com/richedit/COleRichEditCtrl.asp</a><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=652795</p><img src ="http://m.shnenglu.com/microli/aggbug/11472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/microli/" target="_blank">閾佽闊?/a> 2006-08-20 00:34 <a href="http://m.shnenglu.com/microli/articles/11472.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://91pero.com" target="_blank">久久久99免费视频</a>| <a href="http://8xv0.com" target="_blank">欧美一级片在线播放</a>| <a href="http://jzsp121.com" target="_blank">国产精品久久久久永久免费观看 </a>| <a href="http://guanghezixun.com" target="_blank">欧美国产日韩亚洲一区</a>| <a href="http://qhzyxcd.com" target="_blank">久久国产色av</a>| <a href="http://060607.com" target="_blank">理论片一区二区在线</a>| <a href="http://88844401.com" target="_blank">你懂的网址国产 欧美</a>| <a href="http://20074972.com" target="_blank">久久亚洲视频</a>| <a href="http://cp3824.com" target="_blank">欧美成人国产</a>| <a href="http://794238.com" target="_blank">亚洲精品色图</a>| <a href="http://changjiucf.com" target="_blank">亚洲一区二区视频在线</a>| <a href="http://5254f.com" target="_blank">午夜日韩激情</a>| <a href="http://477980.com" target="_blank">久久久久久久久久久一区</a>| <a href="http://p35cc.com" target="_blank">免费一级欧美片在线观看</a>| <a href="http://sygxjt.com" target="_blank">欧美精品乱人伦久久久久久 </a>| <a href="http://9a5x.com" target="_blank">欧美日本国产在线</a>| <a href="http://3bmmtv.com" target="_blank">国产精品久久毛片a</a>| <a href="http://gzxyh88.com" target="_blank">国产午夜精品一区理论片飘花</a>| <a href="http://8xn66w.com" target="_blank">国产日韩综合一区二区性色av</a>| <a href="http://5657hh.com" target="_blank">精品动漫3d一区二区三区</a>| <a href="http://hbshwx.com" target="_blank">亚洲精品少妇网址</a>| <a href="http://hzdss.com" target="_blank">午夜视频在线观看一区二区</a>| <a href="http://278263.com" target="_blank">猛干欧美女孩</a>| <a href="http://679776.com" target="_blank">99亚洲精品</a>| <a href="http://dahuxu.com" target="_blank">久久久久一区二区三区</a>| <a href="http://4tobi.com" target="_blank">欧美日韩在线播放三区四区</a>| <a href="http://xsjgxx.com" target="_blank">国产一区二区三区无遮挡</a>| <a href="http://49234c.com" target="_blank">亚洲黄色一区</a>| <a href="http://quanfadq.com" target="_blank">亚洲在线免费观看</a>| <a href="http://laoyewo.com" target="_blank">美女黄毛**国产精品啪啪</a>| <a href="http://778877k.com" target="_blank">一级成人国产</a>| <a href="http://710191.com" target="_blank">欧美波霸影院</a>| <a href="http://youminwang.com" target="_blank">国产日韩欧美在线播放</a>| <a href="http://954k.com" target="_blank">日韩午夜在线</a>| <a href="http://xuanxuan88.com" target="_blank">久久午夜视频</a>| <a href="http://bmcshy.com" target="_blank">亚洲尤物影院</a>| <a href="http://playav111.com" target="_blank">在线看日韩欧美</a>| <a href="http://221080.com" target="_blank">亚洲女人天堂成人av在线</a>| <a href="http://8eya.com" target="_blank">欧美高清在线一区</a>| <a href="http://www-493049.com" target="_blank">午夜精品久久</a>| <a href="http://97gaoba.com" target="_blank">国产精品扒开腿做爽爽爽视频</a>| <a href="http://7811c.com" target="_blank">亚洲国产精品久久久久秋霞蜜臀</a>| <a href="http://heyzo1031.com" target="_blank">性做久久久久久久久</a>| <a href="http://www49853b.com" target="_blank">亚洲欧洲在线一区</a>| <a href="http://990288.com" target="_blank">午夜一区在线</a>| <a href="http://1x118.com" target="_blank">国产精品电影在线观看</a>| <a href="http://sxhrsmjj.com" target="_blank">亚洲精品一区二区在线观看</a>| <a href="http://hhh699.com" target="_blank">久久天天躁夜夜躁狠狠躁2022</a>| <a href="http://kakatok.com" target="_blank">一本一本久久a久久精品牛牛影视</a>| <a href="http://hhbz518.com" target="_blank">免费成人网www</a>| <a href="http://lgcpvip888.com" target="_blank">激情综合自拍</a>| <a href="http://19zet.com" target="_blank">快she精品国产999</a>| <a href="http://lgaoxiao.com" target="_blank">欧美淫片网站</a>| <a href="http://3737520.com" target="_blank">国产一区二区三区日韩</a>| <a href="http://777177c.com" target="_blank">欧美在线播放高清精品</a>| <a href="http://jyboke.com" target="_blank">亚洲欧美日韩精品综合在线观看 </a>| <a href="http://www-24333.com" target="_blank">美女国产一区</a>| <a href="http://5252bnet.com" target="_blank">国产亚洲欧美一区二区</a>| <a href="http://gjjlzs.com" target="_blank">亚洲欧美日韩中文视频</a>| <a href="http://330310c.com" target="_blank">av不卡在线</a>| <a href="http://123086.com" target="_blank">欧美日韩午夜在线</a>| <a href="http://www-733999.com" target="_blank">99re6这里只有精品</a>| <a href="http://dacellflex.com" target="_blank">亚洲国产天堂久久综合网</a>| <a href="http://wwwnnnn.com" target="_blank">久久午夜电影</a>| <a href="http://110488.com" target="_blank">91久久久国产精品</a>| <a href="http://yw3328.com" target="_blank">亚洲大胆视频</a>| <a href="http://psykoptic.com" target="_blank">欧美福利一区二区三区</a>| <a href="http://wwwyinyinai149.com" target="_blank">亚洲欧洲日本一区二区三区</a>| <a href="http://888nei.com" target="_blank">亚洲国产欧美在线</a>| <a href="http://gaysexcube.com" target="_blank">欧美精品久久久久久久久久</a>| <a href="http://by5263.com" target="_blank">一本在线高清不卡dvd</a>| <a href="http://2312138.com" target="_blank">亚洲日本中文</a>| <a href="http://pourporn.com" target="_blank">国产精品国产馆在线真实露脸</a>| <a href="http://yujiaosanye.com" target="_blank">亚洲影院在线观看</a>| <a href="http://mathck.com" target="_blank">午夜精品久久</a>| <a href="http://sepapapa8888.com" target="_blank">在线观看成人av电影</a>| <a href="http://qqkanp.com" target="_blank">欧美国产成人在线</a>| <a href="http://www-yh6.com" target="_blank">欧美另类69精品久久久久9999</a>| <a href="http://9927tv.com" target="_blank">亚洲私拍自拍</a>| <a href="http://anal-movie-teen.com" target="_blank">亚洲在线一区二区</a>| <a href="http://039658.com" target="_blank">激情综合色综合久久</a>| <a href="http://ahqdlq.com" target="_blank">91久久午夜</a>| <a href="http://wce-expo.com" target="_blank">国产精品视频内</a>| <a href="http://clgtzz.com" target="_blank">美女脱光内衣内裤视频久久影院</a>| <a href="http://ynjzwh.com" target="_blank">久久综合999</a>| <a href="http://498626.com" target="_blank">中文国产亚洲喷潮</a>| <a href="http://lexueit.com" target="_blank">小黄鸭精品aⅴ导航网站入口</a>| <a href="http://jxyptsw.com" target="_blank">在线免费一区三区</a>| <a href="http://qiezi2vip.com" target="_blank">99伊人成综合</a>| <a href="http://www-11688.com" target="_blank">激情欧美一区二区三区在线观看</a>| <a href="http://submro.com" target="_blank">亚洲国产成人在线视频</a>| <a href="http://xpfuli.com" target="_blank">国产精品久久久久毛片软件</a>| <a href="http://p5555ww.com" target="_blank">久久亚洲春色中文字幕久久久 </a>| <a href="http://566805.com" target="_blank">欧美视频在线免费看</a>| <a href="http://www-236677.com" target="_blank">午夜精品久久久久久久男人的天堂</a>| <a href="http://778kb.com" target="_blank">欧美极品在线播放</a>| <a href="http://000695.com" target="_blank">欧美一区二区三区免费观看视频 </a>| <a href="http://8946286.com" target="_blank">亚洲精品日韩欧美</a>| <a href="http://kk5551.com" target="_blank">国产午夜一区二区三区</a>| <a href="http://tizenkorea.com" target="_blank">欧美黄色aa电影</a>| <a href="http://www-273111.com" target="_blank">国产精品久久久久国产a级</a>| <a href="http://cxjzcl.com" target="_blank">另类av导航</a>| <a href="http://bkksd.com" target="_blank">国产精品手机在线</a>| <a href="http://ccc159.com" target="_blank">亚洲春色另类小说</a>| <a href="http://joy-learn.com" target="_blank">国产精品亚洲视频</a>| <a href="http://97gaoba.com" target="_blank">欧美电影在线</a>| <a href="http://26mmmm.com" target="_blank">国产亚洲毛片</a>| <a href="http://798814.com" target="_blank">亚洲免费播放</a>| <a href="http://8332777.com" target="_blank">一区二区三区在线观看视频</a>| <a href="http://aidingcai.com" target="_blank">日韩视频一区二区</a>| <a href="http://lyminghang.com" target="_blank">精品成人一区</a>| <a href="http://858185gg.com" target="_blank">亚洲综合99</a>| <a href="http://avse69.com" target="_blank">中文亚洲字幕</a>| <a href="http://bkf23.com" target="_blank">欧美成人高清视频</a>| <a href="http://580388.com" target="_blank">国产欧美日韩不卡免费</a>| <a href="http://2938423.com" target="_blank">亚洲精选中文字幕</a>| <a href="http://www-e2222.com" target="_blank">久久精品官网</a>| <a href="http://fuwu56.com" target="_blank">亚洲欧美日韩爽爽影院</a>| <a href="http://chenyirong.com" target="_blank">免费久久精品视频</a>| <a href="http://527937.com" target="_blank">久久久999</a>| <a href="http://www-76577c.com" target="_blank">国产精品嫩草久久久久</a>| <a href="http://phitris.com" target="_blank">亚洲黄色成人久久久</a>| <a href="http://848585.com" target="_blank">黄色亚洲精品</a>| <a href="http://353033.com" target="_blank">香蕉成人久久</a>| <a href="http://www-kj777.com" target="_blank">午夜精品久久</a>| <a href="http://707fx.com" target="_blank">欧美日韩在线一二三</a>| <a href="http://zhongqingshiye.com" target="_blank">欧美激情第4页</a>| <a href="http://www330849.com" target="_blank">在线观看欧美日韩</a>| <a href="http://yw3328.com" target="_blank">久久精品99久久香蕉国产色戒 </a>| <a href="http://china-cvct.com" target="_blank">久久久久久久网</a>| <a href="http://ae262.com" target="_blank">国产精品国产三级国产aⅴ入口 </a>| <a href="http://pigkrtv.com" target="_blank">久久国产免费</a>| <a href="http://sfrecq.com" target="_blank">欧美有码视频</a>| <a href="http://483134.com" target="_blank">国产精品美女久久福利网站</a>| <a href="http://0085212.com" target="_blank">a4yy欧美一区二区三区</a>| <a href="http://107766a.com" target="_blank">亚洲日本成人</a>| <a href="http://o6186.com" target="_blank">欧美激情视频在线播放</a>| <a href="http://gs-qintai.com" target="_blank">欧美77777</a>| <a href="http://994745.com" target="_blank">91久久精品美女</a>| <a href="http://668www.com" target="_blank">久久午夜视频</a>| <a href="http://by777131.com" target="_blank">欧美粗暴jizz性欧美20</a>| <a href="http://www-26333com.com" target="_blank">韩日精品视频</a>| <a href="http://868482.com" target="_blank">久久精品30</a>| <a href="http://www353488.com" target="_blank">久久久久久一区二区</a>| <a href="http://194123.com" target="_blank">激情视频一区二区三区</a>| <a href="http://54zcr.com" target="_blank">久久米奇亚洲</a>| <a href="http://sxxawef.com" target="_blank">亚洲福利视频一区二区</a>| <a href="http://05511253.com" target="_blank">亚洲免费成人av电影</a>| <a href="http://www48929.com" target="_blank">欧美啪啪一区</a>| <a href="http://china391.com" target="_blank">一本不卡影院</a>| <a href="http://xxxbobba.com" target="_blank">亚洲在线观看视频网站</a>| <a href="http://226671.com" target="_blank">国产毛片一区二区</a>| <a href="http://www30bxbx.com" target="_blank">欧美影院成年免费版</a>| <a href="http://jybiotek.com" target="_blank">久久中文精品</a>| <a href="http://szywsj.com" target="_blank">亚洲乱码视频</a>| <a href="http://www-44469.com" target="_blank">国产精品免费区二区三区观看</a>| <a href="http://m72722.com" target="_blank">亚洲一区国产视频</a>| <a href="http://hg98688.com" target="_blank">久久久美女艺术照精彩视频福利播放</a>| <a href="http://csmdjs.com" target="_blank">狠狠爱综合网</a>| <a href="http://7kz6.com" target="_blank">欧美啪啪一区</a>| <a href="http://88xjj.com" target="_blank">欧美在线一二三区</a>| <a href="http://chinasck.com" target="_blank">亚洲国产精品999</a>| <a href="http://khc83.com" target="_blank">亚洲在线一区</a>| <a href="http://www-e2222.com" target="_blank">欧美一区二区三区免费观看 </a>| <a href="http://by1422.com" target="_blank">欧美bbbxxxxx</a>| <a href="http://www-3844444.com" target="_blank">亚洲美女尤物影院</a>| <a href="http://www-369111.com" target="_blank">欧美影院视频</a>| <a href="http://7777525.com" target="_blank">亚洲国产一区二区a毛片</a>| <a href="http://8xyxs1.com" target="_blank">欧美日本国产</a>| <a href="http://91ymz.com" target="_blank">久久岛国电影</a>| <a href="http://777777hd.com" target="_blank">亚洲精品乱码视频 </a>| <a href="http://jkllkg.com" target="_blank">亚洲国产欧美一区</a>| <a href="http://876769.com" target="_blank">亚洲在线观看视频</a>| <a href="http://621762.com" target="_blank">在线不卡欧美</a>| <a href="http://q731.com" target="_blank">国产精品成av人在线视午夜片</a>| <a href="http://sese135.com" target="_blank">一本久道久久综合狠狠爱</a>| <a href="http://hgx123.com" target="_blank">国产日韩精品电影</a>| <a href="http://www101804.com" target="_blank">久久国产精品久久国产精品</a>| <a href="http://jjy891.com" target="_blank">亚洲激情一区二区</a>| <a href="http://345fz.com " target="_blank">欧美在线|欧美</a>| <a href="http://hsxinbao.com" target="_blank">99视频精品在线</a>| <a href="http://www-44469.com" target="_blank">国产偷国产偷精品高清尤物</a>| <a href="http://filark.com" target="_blank">欧美国产成人在线</a>| <a href="http://ndr666.com" target="_blank">欧美一区二区三区久久精品茉莉花</a>| <a href="http://nxhjzddata.com" target="_blank">男女激情视频一区</a>| <a href="http://wwwyinyinai149.com" target="_blank">亚洲欧美资源在线</a>| <a href="http://xiaokd666.com" target="_blank">亚洲国产日韩欧美综合久久</a>| <a href="http://fsdashen.com" target="_blank">国产精品亚洲成人</a>| <a href="http://eshop999.com" target="_blank">欧美激情视频网站</a>| <a href="http://989766.com" target="_blank">久久成人综合视频</a>| <a href="http://topjavhd.com" target="_blank">亚洲在线视频网站</a>| <a href="http://899gh.com" target="_blank">99re视频这里只有精品</a>| <a href="http://hznaja.com" target="_blank">欧美成人午夜激情</a>| <a href="http://sepapapa8888.com" target="_blank">久久精品国产精品亚洲精品</a>| <a href="http://www-kj777.com" target="_blank">一区二区高清</a>| <a href="http://www87bbw.com" target="_blank">亚洲日本乱码在线观看</a>| <a href="http://uuclassroom.com" target="_blank">在线精品国精品国产尤物884a</a>| <a href="http://snis675.com" target="_blank">国产欧美日韩视频</a>| <a href="http://53xxxx.com" target="_blank">欧美午夜在线一二页</a>| <a href="http://bckxy.com" target="_blank">欧美承认网站</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>