社区
ATL
帖子详情
BEGIN_EVENTSINK_MAP(CTdaxDlg, CDialog) 是怎么出来的
doudoushen
2008-12-30 10:25:38
一个dlg程序中使用activex控件遇到问题。 在dlg中要响应activex的事件,那么在dlg需要映射BEGIN_EVENTSINK_MAP
请问BEGIN_EVENTSINK_MAP是怎么怎么出来的,不会是手工添加吧
另外,能否简单的说下映射中ONEVENT里的参数 使用。谢谢,分不够可以加
...全文
1267
6
打赏
收藏
BEGIN_EVENTSINK_MAP(CTdaxDlg, CDialog) 是怎么出来的
一个dlg程序中使用activex控件遇到问题。 在dlg中要响应activex的事件,那么在dlg需要映射BEGIN_EVENTSINK_MAP 请问BEGIN_EVENTSINK_MAP是怎么怎么出来的,不会是手工添加吧 另外,能否简单的说下映射中ONEVENT里的参数 使用。谢谢,分不够可以加
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
success000
2008-12-31
打赏
举报
回复
帮顶
youngwolf
2008-12-31
打赏
举报
回复
vc6.0支持这个宏,在classwizard里面,找到控件ID,它的事件就会列出来,选择一个事件,添加响应函数即可。
UDX协议
2008-12-31
打赏
举报
回复
在控件上点右见,然后菜单上会有一个“添加事件”的选项,然后选中你关心的事件,点确定就会帮你添加。
doudoushen
2008-12-31
打赏
举报
回复
我是vc6.0
doudoushen
2008-12-31
打赏
举报
回复
请问怎么设置才能让vc自动添加
oyljerry
2008-12-30
打赏
举报
回复
要么编译器替你添加的,如果没有,就自己手动添加
stdafx.h代码
stdafx.h的代码// This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // ele
ct
ronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes produ
ct
. #ifndef __AFXWIN_H__ #ifndef RC_INVOKED #define __AFXWIN_H__ ///////////////////////////////////////////////////////////////////////////// // Make sure 'afx.h' is included first #ifndef __AFX_H__ #include #endif // Note: WINDOWS.H already included from AFXV_W32.H #ifndef _INC_SHELLAPI #include #endif #ifndef __AFXRES_H__ #include // standard resource IDs #endif #ifndef __AFXCOLL_H__ #include // standard colle
ct
ions #endif #ifdef _AFX_MINREBUILD #pragma component(minrebuild, off) #endif #ifndef _AFX_FULLTYPEINFO #pragma component(mintypeinfo, on) #endif #ifndef _AFX_NOFORCE_LIBS #pragma comment(lib, "uuid.lib") #endif #ifdef _INC_WINDOWSX // The following names from WINDOWSX.H collide with names in this header #undef SubclassWindow #undef CopyRgn #endif #ifdef _AFX_PACKING #pragma pack(push, _AFX_PACKING) #endif ///////////////////////////////////////////////////////////////////////////// // Classes declared in this file class CSize; class CPoint; class CRe
ct
; //CObje
ct
//CException //CSimpleException class CResourceException;// Win resource failure exception class CUserException; // Message Box alert and stop operation class CGdiObje
ct
; // CDC drawing tool class CPen; // a pen / HPEN wrapper class CBrush; // a brush / HBRUSH wrapper class CFont; // a font / HFONT wrapper class CBit
map
; // a bit
map
/ HBIT
MAP
wrapper class CPalette; // a palette / HPALLETE wrapper class CRgn; // a region / HRGN wrapper class CDC; // a Display Context / HDC wrapper class CClientDC; // CDC for client of window class CWindowDC; // CDC for entire window class CPaintDC; // embeddable Be
gin
Paint stru
ct
helper class CMenu; // a menu / HMENU wrapper class CCmdTarget; // a target for user commands class CWnd; // a window / HWND wrapper class C
Dialog
; // a
dialog
// standard windows controls class CStatic; // Static control class CButton; // Button control class CListBox; // ListBox control class CCheckListBox;// special listbox with checks class CComboBox; // ComboBox control class CEdit; // Edit control class CScrollBar; // ScrollBar control // frame windows class CFrameWnd; // standard SDI frame class CMDIFrameWnd; // standard MDI frame class CMDIChildWnd; // standard MDI child class CMiniFrameWnd;// half-height caption frame wnd // views on a document class CView; // a view on a document class CScrollView; // a scrolling view class CWinThread; // thread base class class CWinApp; // application base class class CDo
cT
emplate; // template for document creation class CSingleDo
cT
emplate;// SDI support class CMultiDo
cT
emplate; // MDI support class CDocument; // main document abstra
ct
ion // Helper classes class CCmdUI; // Menu/button enabling class CDataExchange; // Data exchange and validation context class CCommandLineInfo; // CommandLine parsing helper class CDocManager; // CDo
cT
emplate manager obje
ct
///////////////////////////////////////////////////////////////////////////// // Type modifier for message handlers #ifndef afx_msg #define afx_msg // intentional placeholder #endif #undef AFX_DATA #define AFX_DATA AFX_CORE_DATA ///////////////////////////////////////////////////////////////////////////// // CSize - An extent, similar to Windows SIZE stru
ct
ure. class CSize : public tagSIZE { public: // Constru
ct
ors // constru
ct
an uninitialized size CSize(); // create from two integers CSize(int initCX, int initCY); // create from another size CSize(SIZE initSize); // create from a point CSize(POINT initPt); // create from a DWORD: cx = LOWORD(dw) cy = HIWORD(dw) CSize(DWORD dwSize); // Operations BOOL operator==(SIZE size) const; BOOL operator!=(SIZE size) const; void operator+=(SIZE size); void operator-=(SIZE size); // Operators returning CSize values CSize operator+(SIZE size) const; CSize operator-(SIZE size) const; CSize operator-() const; // Operators returning CPoint values CPoint operator+(POINT point) const; CPoint operator-(POINT point) const; // Operators returning CRe
ct
values CRe
ct
operator+(const RE
CT
* lpRe
ct
) const; CRe
ct
operator-(const RE
CT
* lpRe
ct
) const; }; ///////////////////////////////////////////////////////////////////////////// // CPoint - A 2-D point, similar to Windows POINT stru
ct
ure. class CPoint : public tagPOINT { public: // Constru
ct
ors // create an uninitialized point CPoint(); // create from two integers CPoint(int initX, int initY); // create from another point CPoint(POINT initPt); // create from a size CPoint(SIZE initSize); // create from a dword: x = LOWORD(dw) y = HIWORD(dw) CPoint(DWORD dwPoint); // Operations // translate the point void Offset(int xOffset, int yOffset); void Offset(POINT point); void Offset(SIZE size); BOOL operator==(POINT point) const; BOOL operator!=(POINT point) const; void operator+=(SIZE size); void operator-=(SIZE size); void operator+=(POINT point); void operator-=(POINT point); // Operators returning CPoint values CPoint operator+(SIZE size) const; CPoint operator-(SIZE size) const; CPoint operator-() const; CPoint operator+(POINT point) const; // Operators returning CSize values CSize operator-(POINT point) const; // Operators returning CRe
ct
values CRe
ct
operator+(const RE
CT
* lpRe
ct
) const; CRe
ct
operator-(const RE
CT
* lpRe
ct
) const; }; ///////////////////////////////////////////////////////////////////////////// // CRe
ct
- A 2-D re
ct
angle, similar to Windows RE
CT
stru
ct
ure. typedef const RE
CT
* LPCRE
CT
; // pointer to read/only RE
CT
class CRe
ct
: public tagRE
CT
{ public: // Constru
ct
ors // uninitialized re
ct
angle CRe
ct
(); // from left, top, right, and bottom CRe
ct
(int l, int t, int r, int b); // copy constru
ct
or CRe
ct
(const RE
CT
& srcRe
ct
); // from a pointer to another re
ct
CRe
ct
(LPCRE
CT
lpSrcRe
ct
); // from a point and size CRe
ct
(POINT point, SIZE size); // from two points CRe
ct
(POINT topLeft, POINT bottomRight); // Attributes (in addition to RE
CT
members) // retrieves the width int Width() const; // returns the height int Height() const; // returns the size CSize Size() const; // reference to the top-left point CPoint& TopLeft(); // reference to the bottom-right point CPoint& BottomRight(); // const reference to the top-left point const CPoint& TopLeft() const; // const reference to the bottom-right point const CPoint& BottomRight() const; // the geometric center point of the re
ct
angle CPoint CenterPoint() const; // swap the left and right void SwapLeftRight(); static void SwapLeftRight(LPRE
CT
lpRe
ct
); // convert between CRe
ct
and LPRE
CT
/LPCRE
CT
(no need for &) operator LPRE
CT
(); operator LPCRE
CT
() const; // returns TRUE if re
ct
angle has no area BOOL IsRe
ct
Empty() const; // returns TRUE if re
ct
angle is at (0,0) and has no area BOOL IsRe
ct
Null() const; // returns TRUE if point is within re
ct
angle BOOL PtInRe
ct
(POINT point) const; // Operations // set re
ct
angle from left, top, right, and bottom void SetRe
ct
(int x1, int y1, int x2, int y2); void SetRe
ct
(POINT topLeft, POINT bottomRight); // empty the re
ct
angle void SetRe
ct
Empty(); // copy from another re
ct
angle void CopyRe
ct
(LPCRE
CT
lpSrcRe
ct
); // TRUE if exa
ct
ly the same as another re
ct
angle BOOL EqualRe
ct
(LPCRE
CT
lpRe
ct
) const; // inflate re
ct
angle's width and height without // moving its top or left void InflateRe
ct
(int x, int y); void InflateRe
ct
(SIZE size); void InflateRe
ct
(LPCRE
CT
lpRe
ct
); void InflateRe
ct
(int l, int t, int r, int b); // deflate the re
ct
angle's width and height without // moving its top or left void DeflateRe
ct
(int x, int y); void DeflateRe
ct
(SIZE size); void DeflateRe
ct
(LPCRE
CT
lpRe
ct
); void DeflateRe
ct
(int l, int t, int r, int b); // translate the re
ct
angle by moving its top and left void OffsetRe
ct
(int x, int y); void OffsetRe
ct
(SIZE size); void OffsetRe
ct
(POINT point); void NormalizeRe
ct
(); // set this re
ct
angle to interse
ct
ion of two others BOOL Interse
ct
Re
ct
(LPCRE
CT
lpRe
ct
1, LPCRE
CT
lpRe
ct
2); // set this re
ct
angle to bounding union of two others BOOL UnionRe
ct
(LPCRE
CT
lpRe
ct
1, LPCRE
CT
lpRe
ct
2); // set this re
ct
angle to minimum of two others BOOL Subtra
ct
Re
ct
(LPCRE
CT
lpRe
ct
Src1, LPCRE
CT
lpRe
ct
Src2); // Additional Operations void operator=(const RE
CT
& srcRe
ct
); BOOL operator==(const RE
CT
& re
ct
) const; BOOL operator!=(const RE
CT
& re
ct
) const; void operator+=(POINT point); void operator+=(SIZE size); void operator+=(LPCRE
CT
lpRe
ct
); void operator-=(POINT point); void operator-=(SIZE size); void operator-=(LPCRE
CT
lpRe
ct
); void operator&=(const RE
CT
& re
ct
); void operator|=(const RE
CT
& re
ct
); // Operators returning CRe
ct
values CRe
ct
operator+(POINT point) const; CRe
ct
operator-(POINT point) const; CRe
ct
operator+(LPCRE
CT
lpRe
ct
) const; CRe
ct
operator+(SIZE size) const; CRe
ct
operator-(SIZE size) const; CRe
ct
operator-(LPCRE
CT
lpRe
ct
) const; CRe
ct
operator&(const RE
CT
& re
ct
2) const; CRe
ct
operator|(const RE
CT
& re
ct
2) const; CRe
ct
MulDiv(int nMultiplier, int nDivisor) const; }; #ifdef _DEBUG // Diagnostic Output CDumpContext& AFXAPI operator<<(CDumpContext& dc, SIZE size); CDumpContext& AFXAPI operator<<(CDumpContext& dc, POINT point); CDumpContext& AFXAPI operator<<(CDumpContext& dc, const RE
CT
& re
ct
); #endif //_DEBUG // Serialization CArchive& AFXAPI operator<<(CArchive& ar, SIZE size); CArchive& AFXAPI operator<<(CArchive& ar, POINT point); CArchive& AFXAPI operator<>(CArchive& ar, SIZE& size); CArchive& AFXAPI operator>>(CArchive& ar, POINT& point); CArchive& AFXAPI operator>>(CArchive& ar, RE
CT
& re
ct
); ///////////////////////////////////////////////////////////////////////////// // Standard exceptions class CResourceException : public CSimpleException // resource failure { DECLARE_DYNAMIC(CResourceException) public: CResourceException(); // Implementation public: CResourceException(BOOL bAutoDelete); CResourceException(BOOL bAutoDelete, UINT nResourceID); virtual ~CResourceException(); }; class CUserException : public CSimpleException // general user visible alert { DECLARE_DYNAMIC(CUserException) public: CUserException(); // Implementation public: CUserException(BOOL bAutoDelete); CUserException(BOOL bAutoDelete, UINT nResourceID); virtual ~CUserException(); }; void AFXAPI AfxThrowResourceException(); void AFXAPI AfxThrowUserException(); ///////////////////////////////////////////////////////////////////////////// // CGdiObje
ct
abstra
ct
class for CDC Sele
ct
Obje
ct
class CGdiObje
ct
: public CObje
ct
{ DECLARE_DYNCREATE(CGdiObje
ct
) public: // Attributes HGDIOBJ m_hObje
ct
; // must be first data member operator HGDIOBJ() const; HGDIOBJ GetSafeHandle() const; static CGdiObje
ct
* PASCAL FromHandle(HGDIOBJ hObje
ct
); static void PASCAL DeleteTemp
Map
(); BOOL Attach(HGDIOBJ hObje
ct
); HGDIOBJ Detach(); // Constru
ct
ors CGdiObje
ct
(); // must Create a derived class obje
ct
BOOL DeleteObje
ct
(); // Operations int GetObje
ct
(int nCount, LPVOID lpObje
ct
) const; UINT GetObje
ct
Type() const; BOOL CreateStockObje
ct
(int nIndex); BOOL UnrealizeObje
ct
(); BOOL operator==(const CGdiObje
ct
& obj) const; BOOL operator!=(const CGdiObje
ct
& obj) const; // Implementation public: virtual ~CGdiObje
ct
(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; virtual void AssertValid() const; #endif }; ///////////////////////////////////////////////////////////////////////////// // CGdiObje
ct
subclasses (drawing tools) class CPen : public CGdiObje
ct
{ DECLARE_DYNAMIC(CPen) public: static CPen* PASCAL FromHandle(HPEN hPen); // Constru
ct
ors CPen(); CPen(int nPenStyle, int nWidth, COLORREF crColor); CPen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL); BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); BOOL CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL); BOOL CreatePenIndire
ct
(LPLOGPEN lpLogPen); // Attributes operator HPEN() const; int GetLogPen(LOGPEN* pLogPen); int GetExtLogPen(EXTLOGPEN* pLogPen); // Implementation public: virtual ~CPen(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; #endif }; class CBrush : public CGdiObje
ct
{ DECLARE_DYNAMIC(CBrush) public: static CBrush* PASCAL FromHandle(HBRUSH hBrush); // Constru
ct
ors CBrush(); CBrush(COLORREF crColor); // CreateSolidBrush CBrush(int nIndex, COLORREF crColor); // CreateHatchBrush CBrush(CBit
map
* pBit
map
); // CreatePatternBrush BOOL CreateSolidBrush(COLORREF crColor); BOOL CreateHatchBrush(int nIndex, COLORREF crColor); BOOL CreateBrushIndire
ct
(const LOGBRUSH* lpLogBrush); BOOL CreatePatternBrush(CBit
map
* pBit
map
); BOOL CreateDIBPatternBrush(HGLOBAL hPackedDIB, UINT nUsage); BOOL CreateDIBPatternBrush(const void* lpPackedDIB, UINT nUsage); BOOL CreateSysColorBrush(int nIndex); // Attributes operator HBRUSH() const; int GetLogBrush(LOGBRUSH* pLogBrush); // Implementation public: virtual ~CBrush(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; #endif }; class CFont : public CGdiObje
ct
{ DECLARE_DYNAMIC(CFont) public: static CFont* PASCAL FromHandle(HFONT hFont); // Constru
ct
ors CFont(); BOOL CreateFontIndire
ct
(const LOGFONT* lpLogFont); BOOL CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LP
CT
STR lpszFacename); BOOL CreatePointFont(int nPointSize, LP
CT
STR lpszFaceName, CDC* pDC = NULL); BOOL CreatePointFontIndire
ct
(const LOGFONT* lpLogFont, CDC* pDC = NULL); // Attributes operator HFONT() const; int GetLogFont(LOGFONT* pLogFont); // Implementation public: virtual ~CFont(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; #endif }; class CBit
map
: public CGdiObje
ct
{ DECLARE_DYNAMIC(CBit
map
) public: static CBit
map
* PASCAL FromHandle(HBIT
MAP
hBit
map
); // Constru
ct
ors CBit
map
(); BOOL LoadBit
map
(LP
CT
STR lpszResourceName); BOOL LoadBit
map
(UINT nIDResource); BOOL LoadOEMBit
map
(UINT nIDBit
map
); // for OBM_/OCR_/OIC_ BOOL Load
Map
pedBit
map
(UINT nIDBit
map
, UINT nFlags = 0, LPCOLOR
MAP
lpColor
Map
= NULL, int n
Map
Size = 0); BOOL CreateBit
map
(int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits); BOOL CreateBit
map
Indire
ct
(LPBIT
MAP
lpBit
map
); BOOL CreateCompatibleBit
map
(CDC* pDC, int nWidth, int nHeight); BOOL CreateDiscardableBit
map
(CDC* pDC, int nWidth, int nHeight); // Attributes operator HBIT
MAP
() const; int GetBit
map
(BIT
MAP
* pBit
Map
); // Operations DWORD SetBit
map
Bits(DWORD dwCount, const void* lpBits); DWORD GetBit
map
Bits(DWORD dwCount, LPVOID lpBits) const; CSize SetBit
map
Dimension(int nWidth, int nHeight); CSize GetBit
map
Dimension() const; // Implementation public: virtual ~CBit
map
(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; #endif }; class CPalette : public CGdiObje
ct
{ DECLARE_DYNAMIC(CPalette) public: static CPalette* PASCAL FromHandle(HPALETTE hPalette); // Constru
ct
ors CPalette(); BOOL CreatePalette(LPLOGPALETTE lpLogPalette); BOOL CreateHalftonePalette(CDC* pDC); // Attributes operator HPALETTE() const; int GetEntryCount(); UINT GetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors) const; UINT SetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors); // Operations void AnimatePalette(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors); UINT GetNearestPaletteIndex(COLORREF crColor) const; BOOL ResizePalette(UINT nNumEntries); // Implementation virtual ~CPalette(); }; class CRgn : public CGdiObje
ct
{ DECLARE_DYNAMIC(CRgn) public: static CRgn* PASCAL FromHandle(HRGN hRgn); operator HRGN() const; // Constru
ct
ors CRgn(); BOOL CreateRe
ct
Rgn(int x1, int y1, int x2, int y2); BOOL CreateRe
ct
RgnIndire
ct
(LPCRE
CT
lpRe
ct
); BOOL CreateEllipticRgn(int x1, int y1, int x2, int y2); BOOL CreateEllipticRgnIndire
ct
(LPCRE
CT
lpRe
ct
); BOOL CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode); BOOL CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode); BOOL CreateRoundRe
ct
Rgn(int x1, int y1, int x2, int y2, int x3, int y3); BOOL CreateFromPath(CDC* pDC); BOOL CreateFromData(const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData); // Operations void SetRe
ct
Rgn(int x1, int y1, int x2, int y2); void SetRe
ct
Rgn(LPCRE
CT
lpRe
ct
); int CombineRgn(CRgn* pRgn1, CRgn* pRgn2, int nCombineMode); int CopyRgn(CRgn* pRgnSrc); BOOL EqualRgn(CRgn* pRgn) const; int OffsetRgn(int x, int y); int OffsetRgn(POINT point); int GetRgnBox(LPRE
CT
lpRe
ct
) const; BOOL PtInRegion(int x, int y) const; BOOL PtInRegion(POINT point) const; BOOL Re
ct
InRegion(LPCRE
CT
lpRe
ct
) const; int GetRegionData(LPRGNDATA lpRgnData, int nCount) const; // Implementation virtual ~CRgn(); }; ///////////////////////////////////////////////////////////////////////////// // The device context class CDC : public CObje
ct
{ DECLARE_DYNCREATE(CDC) public: // Attributes HDC m_hDC; // The output DC (must be first data member) HDC m_hAttribDC; // The Attribute DC operator HDC() const; HDC GetSafeHdc() const; // Always returns the Output DC CWnd* GetWindow() const; static CDC* PASCAL FromHandle(HDC hDC); static void PASCAL DeleteTemp
Map
(); BOOL Attach(HDC hDC); // Attach/Detach affe
ct
s only the Output DC HDC Detach(); virtual void SetAttribDC(HDC hDC); // Set the Attribute DC virtual void SetOutputDC(HDC hDC); // Set the Output DC virtual void ReleaseAttribDC(); // Release the Attribute DC virtual void ReleaseOutputDC(); // Release the Output DC BOOL IsPrinting() const; // TRUE if being used for printing CPen* GetCurrentPen() const; CBrush* GetCurrentBrush() const; CPalette* GetCurrentPalette() const; CFont* GetCurrentFont() const; CBit
map
* GetCurrentBit
map
() const; // for bidi and mirrored localization DWORD GetLayout() const; DWORD SetLayout(DWORD dwLayout); // Constru
ct
ors CDC(); BOOL CreateDC(LP
CT
STR lpszDriverName, LP
CT
STR lpszDeviceName, LP
CT
STR lpszOutput, const void* lpInitData); BOOL CreateIC(LP
CT
STR lpszDriverName, LP
CT
STR lpszDeviceName, LP
CT
STR lpszOutput, const void* lpInitData); BOOL CreateCompatibleDC(CDC* pDC); BOOL DeleteDC(); // Device-Context Fun
ct
ions virtual int SaveDC(); virtual BOOL RestoreDC(int nSavedDC); int GetDeviceCaps(int nIndex) const; UINT SetBoundsRe
ct
(LPCRE
CT
lpRe
ct
Bounds, UINT flags); UINT GetBoundsRe
ct
(LPRE
CT
lpRe
ct
Bounds, UINT flags); BOOL ResetDC(const DEVMODE* lpDevMode); // Drawing-Tool Fun
ct
ions CPoint GetBrushOrg() const; CPoint SetBrushOrg(int x, int y); CPoint SetBrushOrg(POINT point); int EnumObje
ct
s(int nObje
ct
Type, int (CALLBACK* lpfn)(LPVOID, LPARAM), LPARAM lpData); // Type-safe sele
ct
ion helpers public: virtual CGdiObje
ct
* Sele
ct
StockObje
ct
(int nIndex); CPen* Sele
ct
Obje
ct
(CPen* pPen); CBrush* Sele
ct
Obje
ct
(CBrush* pBrush); virtual CFont* Sele
ct
Obje
ct
(CFont* pFont); CBit
map
* Sele
ct
Obje
ct
(CBit
map
* pBit
map
); int Sele
ct
Obje
ct
(CRgn* pRgn); // special return for regions CGdiObje
ct
* Sele
ct
Obje
ct
(CGdiObje
ct
* pObje
ct
); // CGdiObje
ct
* provided so compiler doesn't use Sele
ct
Obje
ct
(HGDIOBJ) // Color and Color Palette Fun
ct
ions COLORREF GetNearestColor(COLORREF crColor) const; CPalette* Sele
ct
Palette(CPalette* pPalette, BOOL bForceBackground); UINT RealizePalette(); void UpdateColors(); // Drawing-Attribute Fun
ct
ions COLORREF GetBkColor() const; int GetBkMode() const; int GetPolyFillMode() const; int GetROP2() const; int GetStretchBltMode() const; COLORREF GetTextColor() const; virtual COLORREF SetBkColor(COLORREF crColor); int SetBkMode(int nBkMode); int SetPolyFillMode(int nPolyFillMode); int SetROP2(int nDrawMode); int SetStretchBltMode(int nStretchMode); virtual COLORREF SetTextColor(COLORREF crColor); BOOL GetColorAdjustment(LPCOLORADJUSTMENT lpColorAdjust) const; BOOL SetColorAdjustment(const COLORADJUSTMENT* lpColorAdjust); //
Map
ping Fun
ct
ions int Get
Map
Mode() const; CPoint GetViewportOrg() const; virtual int Set
Map
Mode(int n
Map
Mode); // Viewport Ori
gin
virtual CPoint SetViewportOrg(int x, int y); CPoint SetViewportOrg(POINT point); virtual CPoint OffsetViewportOrg(int nWidth, int nHeight); // Viewport Extent CSize GetViewportExt() const; virtual CSize SetViewportExt(int cx, int cy); CSize SetViewportExt(SIZE size); virtual CSize ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom); // Window Ori
gin
CPoint GetWindowOrg() const; CPoint SetWindowOrg(int x, int y); CPoint SetWindowOrg(POINT point); CPoint OffsetWindowOrg(int nWidth, int nHeight); // Window extent CSize GetWindowExt() const; virtual CSize SetWindowExt(int cx, int cy); CSize SetWindowExt(SIZE size); virtual CSize ScaleWindowExt(int xNum, int xDenom, int yNum, int yDenom); // Coordinate Fun
ct
ions void DPtoLP(LPPOINT lpPoints, int nCount = 1) const; void DPtoLP(LPRE
CT
lpRe
ct
) const; void DPtoLP(LPSIZE lpSize) const; void LPtoDP(LPPOINT lpPoints, int nCount = 1) const; void LPtoDP(LPRE
CT
lpRe
ct
) const; void LPtoDP(LPSIZE lpSize) const; // Special Coordinate Fun
ct
ions (useful for dealing with metafiles and OLE) void DPtoHIMETRIC(LPSIZE lpSize) const; void LPtoHIMETRIC(LPSIZE lpSize) const; void HIMETRI
Ct
oDP(LPSIZE lpSize) const; void HIMETRI
Ct
oLP(LPSIZE lpSize) const; // Region Fun
ct
ions BOOL FillRgn(CRgn* pRgn, CBrush* pBrush); BOOL FrameRgn(CRgn* pRgn, CBrush* pBrush, int nWidth, int nHeight); BOOL InvertRgn(CRgn* pRgn); BOOL PaintRgn(CRgn* pRgn); // Clipping Fun
ct
ions virtual int GetClipBox(LPRE
CT
lpRe
ct
) const; virtual BOOL PtVisible(int x, int y) const; BOOL PtVisible(POINT point) const; virtual BOOL Re
ct
Visible(LPCRE
CT
lpRe
ct
) const; int Sele
ct
ClipRgn(CRgn* pRgn); int ExcludeClipRe
ct
(int x1, int y1, int x2, int y2); int ExcludeClipRe
ct
(LPCRE
CT
lpRe
ct
); int ExcludeUpdateRgn(CWnd* pWnd); int Interse
ct
ClipRe
ct
(int x1, int y1, int x2, int y2); int Interse
ct
ClipRe
ct
(LPCRE
CT
lpRe
ct
); int OffsetClipRgn(int x, int y); int OffsetClipRgn(SIZE size); int Sele
ct
ClipRgn(CRgn* pRgn, int nMode); // Line-Output Fun
ct
ions CPoint GetCurrentPosition() const; CPoint MoveTo(int x, int y); CPoint MoveTo(POINT point); BOOL LineTo(int x, int y); BOOL LineTo(POINT point); BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL Arc(LPCRE
CT
lpRe
ct
, POINT ptStart, POINT ptEnd); BOOL Polyline(LPPOINT lpPoints, int nCount); BOOL AngleArc(int x, int y, int nRadius, float fStartAngle, float fSweepAngle); BOOL Ar
cT
o(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL Ar
cT
o(LPCRE
CT
lpRe
ct
, POINT ptStart, POINT ptEnd); int GetArcDire
ct
ion() const; int SetArcDire
ct
ion(int nArcDire
ct
ion); BOOL PolyDraw(const POINT* lpPoints, const BYTE* lpTypes, int nCount); BOOL PolylineTo(const POINT* lpPoints, int nCount); BOOL PolyPolyline(const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount); BOOL PolyBezier(const POINT* lpPoints, int nCount); BOOL PolyBezierTo(const POINT* lpPoints, int nCount); // Simple Drawing Fun
ct
ions void FillRe
ct
(LPCRE
CT
lpRe
ct
, CBrush* pBrush); void FrameRe
ct
(LPCRE
CT
lpRe
ct
, CBrush* pBrush); void InvertRe
ct
(LPCRE
CT
lpRe
ct
); BOOL DrawIcon(int x, int y, HICON hIcon); BOOL DrawIcon(POINT point, HICON hIcon); #if (WINVER >= 0x400) BOOL DrawState(CPoint pt, CSize size, HBIT
MAP
hBit
map
, UINT nFlags, HBRUSH hBrush = NULL); BOOL DrawState(CPoint pt, CSize size, CBit
map
* pBit
map
, UINT nFlags, CBrush* pBrush = NULL); BOOL DrawState(CPoint pt, CSize size, HICON hIcon, UINT nFlags, HBRUSH hBrush = NULL); BOOL DrawState(CPoint pt, CSize size, HICON hIcon, UINT nFlags, CBrush* pBrush = NULL); BOOL DrawState(CPoint pt, CSize size, LP
CT
STR lpszText, UINT nFlags, BOOL bPrefixText = TRUE, int nTextLen = 0, HBRUSH hBrush = NULL); BOOL DrawState(CPoint pt, CSize size, LP
CT
STR lpszText, UINT nFlags, BOOL bPrefixText = TRUE, int nTextLen = 0, CBrush* pBrush = NULL); BOOL DrawState(CPoint pt, CSize size, DRAWSTATEPROC lpDrawProc, LPARAM lData, UINT nFlags, HBRUSH hBrush = NULL); BOOL DrawState(CPoint pt, CSize size, DRAWSTATEPROC lpDrawProc, LPARAM lData, UINT nFlags, CBrush* pBrush = NULL); #endif // Ellipse and Polygon Fun
ct
ions BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL Chord(LPCRE
CT
lpRe
ct
, POINT ptStart, POINT ptEnd); void DrawFocusRe
ct
(LPCRE
CT
lpRe
ct
); BOOL Ellipse(int x1, int y1, int x2, int y2); BOOL Ellipse(LPCRE
CT
lpRe
ct
); BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL Pie(LPCRE
CT
lpRe
ct
, POINT ptStart, POINT ptEnd); BOOL Polygon(LPPOINT lpPoints, int nCount); BOOL PolyPolygon(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount); BOOL Re
ct
angle(int x1, int y1, int x2, int y2); BOOL Re
ct
angle(LPCRE
CT
lpRe
ct
); BOOL RoundRe
ct
(int x1, int y1, int x2, int y2, int x3, int y3); BOOL RoundRe
ct
(LPCRE
CT
lpRe
ct
, POINT point); // Bit
map
Fun
ct
ions BOOL PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop); BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop); BOOL StretchBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop); COLORREF GetPixel(int x, int y) const; COLORREF GetPixel(POINT point) const; COLORREF SetPixel(int x, int y, COLORREF crColor); COLORREF SetPixel(POINT point, COLORREF crColor); BOOL FloodFill(int x, int y, COLORREF crColor); BOOL ExtFloodFill(int x, int y, COLORREF crColor, UINT nFillType); BOOL MaskBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, CBit
map
& maskBit
map
, int xMask, int yMask, DWORD dwRop); BOOL PlgBlt(LPPOINT lpPoint, CDC* pSrcDC, int xSrc, int ySrc, int nWidth, int nHeight, CBit
map
& maskBit
map
, int xMask, int yMask); BOOL SetPixelV(int x, int y, COLORREF crColor); BOOL SetPixelV(POINT point, COLORREF crColor); // Text Fun
ct
ions virtual BOOL TextOut(int x, int y, LP
CT
STR lpszString, int nCount); BOOL TextOut(int x, int y, const CString& str); virtual BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRE
CT
lpRe
ct
, LP
CT
STR lpszString, UINT nCount, LPINT lpDxWidths); BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRE
CT
lpRe
ct
, const CString& str, LPINT lpDxWidths); virtual CSize TabbedTextOut(int x, int y, LP
CT
STR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOri
gin
); CSize TabbedTextOut(int x, int y, const CString& str, int nTabPositions, LPINT lpnTabStopPositions, int nTabOri
gin
); virtual int DrawText(LP
CT
STR lpszString, int nCount, LPRE
CT
lpRe
ct
, UINT nFormat); int DrawText(const CString& str, LPRE
CT
lpRe
ct
, UINT nFormat); CSize GetTextExtent(LP
CT
STR lpszString, int nCount) const; CSize GetTextExtent(const CString& str) const; CSize GetOutputTextExtent(LP
CT
STR lpszString, int nCount) const; CSize GetOutputTextExtent(const CString& str) const; CSize GetTabbedTextExtent(LP
CT
STR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions) const; CSize GetTabbedTextExtent(const CString& str, int nTabPositions, LPINT lpnTabStopPositions) const; CSize GetOutputTabbedTextExtent(LP
CT
STR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions) const; CSize GetOutputTabbedTextExtent(const CString& str, int nTabPositions, LPINT lpnTabStopPositions) const; virtual BOOL GrayString(CBrush* pBrush, BOOL (CALLBACK* lpfnOutput)(HDC, LPARAM, int), LPARAM lpData, int nCount, int x, int y, int nWidth, int nHeight); UINT GetTextAlign() const; UINT SetTextAlign(UINT nFlags); int GetTextFace(int nCount, LPTSTR lpszFacename) const; int GetTextFace(CString& rString) const; BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const; BOOL GetOutputTextMetrics(LPTEXTMETRIC lpMetrics) const; int SetTextJustification(int nBreakExtra, int nBreakCount); int GetTextChara
ct
erExtra() const; int SetTextChara
ct
erExtra(int nCharExtra); // Advanced Drawing #if (WINVER >= 0x400) BOOL DrawEdge(LPRE
CT
lpRe
ct
, UINT nEdge, UINT nFlags); BOOL DrawFrameControl(LPRE
CT
lpRe
ct
, UINT nType, UINT nState); #endif // Scrolling Fun
ct
ions BOOL ScrollDC(int dx, int dy, LPCRE
CT
lpRe
ct
Scroll, LPCRE
CT
lpRe
ct
Clip, CRgn* pRgnUpdate, LPRE
CT
lpRe
ct
Update); // Font Fun
ct
ions BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const; BOOL GetOutputCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const; DWORD Set
Map
perFlags(DWORD dwFlag); CSize GetAspe
ct
RatioFilter() const; BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar, LPABC lpabc) const; DWORD GetFontData(DWORD dwTable, DWORD dwOffset, LPVOID lpData, DWORD cbData) const; int GetKerningPairs(int nPairs, LPKERNINGPAIR lpkrnpair) const; UINT GetOutlineTextMetrics(UINT cbData, LPOUTLINETEXTMETRIC lpotm) const; DWORD GetGlyphOutline(UINT nChar, UINT nFormat, LPGLYPHMETRICS lpgm, DWORD cbBuffer, LPVOID lpBuffer, const MAT2* lpmat2) const; BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar, LPABCFLOAT lpABCF) const; BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, float* lpFloatBuffer) const; // Printer/Device Escape Fun
ct
ions virtual int Escape(int nEscape, int nCount, LPCSTR lpszInData, LPVOID lpOutData); int Escape(int nEscape, int nInputSize, LPCSTR lpszInputData, int nOutputSize, LPSTR lpszOutputData); int DrawEscape(int nEscape, int nInputSize, LPCSTR lpszInputData); // Escape helpers int StartDoc(LP
CT
STR lpszDocName); // old Win3.0 version int StartDoc(LPDOCINFO lpDocInfo); int StartPage(); int EndPage(); int SetAbortProc(BOOL (CALLBACK* lpfn)(HDC, int)); int AbortDoc(); int EndDoc(); // MetaFile Fun
ct
ions BOOL PlayMetaFile(HMETAFILE hMF); BOOL PlayMetaFile(HENHMETAFILE hEnhMetaFile, LPCRE
CT
lpBounds); BOOL AddMetaFileComment(UINT nDataSize, const BYTE* pCommentData); // can be used for enhanced metafiles only // Path Fun
ct
ions BOOL AbortPath(); BOOL Be
gin
Path(); BOOL CloseFigure(); BOOL EndPath(); BOOL FillPath(); BOOL FlattenPath(); BOOL StrokeAndFillPath(); BOOL StrokePath(); BOOL WidenPath(); float GetMiterLimit() const; BOOL SetMiterLimit(float fMiterLimit); int GetPath(LPPOINT lpPoints, LPBYTE lpTypes, int nCount) const; BOOL Sele
ct
ClipPath(int nMode); // Misc Helper Fun
ct
ions static CBrush* PASCAL GetHalftoneBrush(); void DrawDragRe
ct
(LPCRE
CT
lpRe
ct
, SIZE size, LPCRE
CT
lpRe
ct
Last, SIZE sizeLast, CBrush* pBrush = NULL, CBrush* pBrushLast = NULL); void FillSolidRe
ct
(LPCRE
CT
lpRe
ct
, COLORREF clr); void FillSolidRe
ct
(int x, int y, int cx, int cy, COLORREF clr); void Draw3dRe
ct
(LPCRE
CT
lpRe
ct
, COLORREF clrTopLeft, COLORREF clrBottomRight); void Draw3dRe
ct
(int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight); // Implementation public: virtual ~CDC(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif // advanced use and implementation BOOL m_bPrinting; HGDIOBJ Sele
ct
Obje
ct
(HGDIOBJ); // do not use for regions prote
ct
ed: // used for implementation of non-virtual Sele
ct
Obje
ct
calls static CGdiObje
ct
* PASCAL Sele
ct
GdiObje
ct
(HDC hDC, HGDIOBJ h); }; ///////////////////////////////////////////////////////////////////////////// // CDC Helpers class CPaintDC : public CDC { DECLARE_DYNAMIC(CPaintDC) // Constru
ct
ors public: CPaintDC(CWnd* pWnd); // Be
gin
Paint // Attributes prote
ct
ed: HWND m_hWnd; public: PAINTSTRU
CT
m_ps; // a
ct
ual paint stru
ct
! // Implementation public: virtual ~CPaintDC(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif }; class CClientDC : public CDC { DECLARE_DYNAMIC(CClientDC) // Constru
ct
ors public: CClientDC(CWnd* pWnd); // Attributes prote
ct
ed: HWND m_hWnd; // Implementation public: virtual ~CClientDC(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif }; class CWindowDC : public CDC { DECLARE_DYNAMIC(CWindowDC) // Constru
ct
ors public: CWindowDC(CWnd* pWnd); // Attributes prote
ct
ed: HWND m_hWnd; // Implementation public: virtual ~CWindowDC(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif }; ///////////////////////////////////////////////////////////////////////////// // CMenu class CMenu : public CObje
ct
{ DECLARE_DYNCREATE(CMenu) public: // Constru
ct
ors CMenu(); BOOL CreateMenu(); BOOL CreatePopupMenu(); BOOL LoadMenu(LP
CT
STR lpszResourceName); BOOL LoadMenu(UINT nIDResource); BOOL LoadMenuIndire
ct
(const void* lpMenuTemplate); BOOL DestroyMenu(); // Attributes HMENU m_hMenu; // must be first data member HMENU GetSafeHmenu() const; operator HMENU() const; static CMenu* PASCAL FromHandle(HMENU hMenu); static void PASCAL DeleteTemp
Map
(); BOOL Attach(HMENU hMenu); HMENU Detach(); // CMenu Operations BOOL DeleteMenu(UINT nPosition, UINT nFlags); BOOL TrackPopupMenu(UINT nFlags, int x, int y, CWnd* pWnd, LPCRE
CT
lpRe
ct
= 0); BOOL operator==(const CMenu& menu) const; BOOL operator!=(const CMenu& menu) const; // CMenuItem Operations BOOL AppendMenu(UINT nFlags, UINT nIDNewItem = 0, LP
CT
STR lpszNewItem = NULL); BOOL AppendMenu(UINT nFlags, UINT nIDNewItem, const CBit
map
* pBmp); UINT CheckMenuItem(UINT nIDCheckItem, UINT nCheck); UINT EnableMenuItem(UINT nIDEnableItem, UINT nEnable); UINT GetMenuItemCount() const; UINT GetMenuItemID(int nPos) const; UINT GetMenuState(UINT nID, UINT nFlags) const; int GetMenuString(UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags) const; int GetMenuString(UINT nIDItem, CString& rString, UINT nFlags) const; BOOL GetMenuItemInfo(UINT nIDItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE); CMenu* GetSubMenu(int nPos) const; BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LP
CT
STR lpszNewItem = NULL); BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBit
map
* pBmp); BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LP
CT
STR lpszNewItem = NULL); BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBit
map
* pBmp); BOOL RemoveMenu(UINT nPosition, UINT nFlags); BOOL SetMenuItemBit
map
s(UINT nPosition, UINT nFlags, const CBit
map
* pBmpUnchecked, const CBit
map
* pBmpChecked); BOOL CheckMenuRadioItem(UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags); BOOL SetDefaultItem(UINT uItem, BOOL fByPos = FALSE); UINT GetDefaultItem(UINT gmdiFlags, BOOL fByPos = FALSE); // Context Help Fun
ct
ions BOOL SetMenuContextHelpId(DWORD dwContextHelpId); DWORD GetMenuContextHelpId() const; // Overridables (must override draw and measure for owner-draw menu items) virtual void DrawItem(LPDRAWITEMSTRU
CT
lpDrawItemStru
ct
); virtual void MeasureItem(LPMEASUREITEMSTRU
CT
lpMeasureItemStru
ct
); // Implementation public: virtual ~CMenu(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif static CMenu* PASCAL CMenu::FromHandlePermanent(HMENU hMenu); }; ///////////////////////////////////////////////////////////////////////////// // Window message
map
handling stru
ct
AFX_MSG
MAP
_ENTRY; // declared below after CWnd stru
ct
AFX_MSG
MAP
{ #ifdef _AFXDLL const AFX_MSG
MAP
* (PASCAL* pfnGetBase
Map
)(); #else const AFX_MSG
MAP
* pBase
Map
; #endif const AFX_MSG
MAP
_ENTRY* lpEntries; }; #ifdef _AFXDLL #define DECLARE_MESSAGE_
MAP
() \ private: \ static const AFX_MSG
MAP
_ENTRY _messageEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_MSG
MAP
message
Map
; \ static const AFX_MSG
MAP
* PASCAL _GetBaseMessage
Map
(); \ virtual const AFX_MSG
MAP
* GetMessage
Map
() const; \ #else #define DECLARE_MESSAGE_
MAP
() \ private: \ static const AFX_MSG
MAP
_ENTRY _messageEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_MSG
MAP
message
Map
; \ virtual const AFX_MSG
MAP
* GetMessage
Map
() const; \ #endif #ifdef _AFXDLL #define BE
GIN
_MESSAGE_
MAP
(theClass, baseClass) \ const AFX_MSG
MAP
* PASCAL theClass::_GetBaseMessage
Map
() \ { return &baseClass;::message
Map
; } \ const AFX_MSG
MAP
* theClass::GetMessage
Map
() const \ { return &theClass;::message
Map
; } \ AFX_COMDAT AFX_DATADEF const AFX_MSG
MAP
theClass::message
Map
= \ { &theClass;::_GetBaseMessage
Map
, &theClass;::_messageEntries[0] }; \ AFX_COMDAT const AFX_MSG
MAP
_ENTRY theClass::_messageEntries[] = \ { \ #else #define BE
GIN
_MESSAGE_
MAP
(theClass, baseClass) \ const AFX_MSG
MAP
* theClass::GetMessage
Map
() const \ { return &theClass;::message
Map
; } \ AFX_COMDAT AFX_DATADEF const AFX_MSG
MAP
theClass::message
Map
= \ { &baseClass;::message
Map
, &theClass;::_messageEntries[0] }; \ AFX_COMDAT const AFX_MSG
MAP
_ENTRY theClass::_messageEntries[] = \ { \ #endif #define END_MESSAGE_
MAP
() \ {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \ }; \ // Message
map
signature values and macros in separate header #include ///////////////////////////////////////////////////////////////////////////// //
Dialog
data exchange (DDX_) and validation (DDV_) // CDataExchange - for data exchange and validation class CDataExchange { // Attributes public: BOOL m_bSaveAndValidate; // TRUE => save and validate data CWnd* m_p
Dlg
Wnd; // container usually a
dialog
// Operations (for implementors of DDX and DDV procs) HWND Prepare
Ct
rl(int nIDC); // return HWND of control HWND PrepareEdit
Ct
rl(int nIDC); // return HWND of control void Fail(); // will throw exception #ifndef _AFX_NO_OCC_SUPPORT CWnd* PrepareOle
Ct
rl(int nIDC); // for OLE controls in
dialog
#endif // Implementation CDataExchange(CWnd* p
Dlg
Wnd, BOOL bSaveAndValidate); HWND m_hWndLastControl; // last control used (for validation) BOOL m_bEditLastControl; // last control was an edit item }; #include // standard DDX_ and DDV_ routines ///////////////////////////////////////////////////////////////////////////// // OLE types typedef LONG HRESULT; stru
ct
IUnknown; typedef IUnknown* LPUNKNOWN; stru
ct
IDispatch; typedef IDispatch* LPDISPATCH; stru
ct
IConne
ct
ionPoint; typedef IConne
ct
ionPoint* LPCONNE
CT
IONPOINT; stru
ct
IEnumOLEVERB; typedef IEnumOLEVERB* LPENUMOLEVERB; typedef stru
ct
_GUID GUID; typedef GUID IID; typedef GUID CLSID; #ifndef _REFCLSID_DEFINED #define REFCLSID const CLSID & #endif typedef long DISPID; typedef unsigned short VARTYPE; typedef long SCODE; #if defined(WIN32) && !defined(OLE2ANSI) typedef WCHAR OLECHAR; #else typedef char OLECHAR; #endif typedef OLECHAR* BSTR; stru
ct
tagDISPPARAMS; typedef tagDISPPARAMS DISPPARAMS; stru
ct
tagVARIANT; typedef tagVARIANT VARIANT; stru
ct
ITypeInfo; typedef ITypeInfo* LPTYPEINFO; stru
ct
ITypeLib; typedef ITypeLib* LPTYPELIB; ///////////////////////////////////////////////////////////////////////////// // CCmdTarget // private stru
ct
ures stru
ct
AFX_CMDHANDLERINFO; // info about where the command is handled stru
ct
AFX_EVENT; // info about an event class
CT
ypeLibCache; // cache for OLE type libraries ///////////////////////////////////////////////////////////////////////////// // OLE interface
map
handling (more in AFXDISP.H) #ifndef _AFX_NO_OLE_SUPPORT stru
ct
AFX_INTERFACE
MAP
_ENTRY { const void* piid; // the interface id (IID) (NULL for aggregate) size_t nOffset; // offset of the interface vtable from m_unknown }; stru
ct
AFX_INTERFACE
MAP
{ #ifdef _AFXDLL const AFX_INTERFACE
MAP
* (PASCAL* pfnGetBase
Map
)(); // NULL is root class #else const AFX_INTERFACE
MAP
* pBase
Map
; #endif const AFX_INTERFACE
MAP
_ENTRY* pEntry; //
map
for this class }; #ifdef _AFXDLL #define DECLARE_INTERFACE_
MAP
() \ private: \ static const AFX_INTERFACE
MAP
_ENTRY _interfaceEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_INTERFACE
MAP
interface
Map
; \ static const AFX_INTERFACE
MAP
* PASCAL _GetBaseInterface
Map
(); \ virtual const AFX_INTERFACE
MAP
* GetInterface
Map
() const; \ #else #define DECLARE_INTERFACE_
MAP
() \ private: \ static const AFX_INTERFACE
MAP
_ENTRY _interfaceEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_INTERFACE
MAP
interface
Map
; \ virtual const AFX_INTERFACE
MAP
* GetInterface
Map
() const; \ #endif #endif //!_AFX_NO_OLE_SUPPORT ///////////////////////////////////////////////////////////////////////////// // OLE dispatch
map
handling (more in AFXDISP.H) #ifndef _AFX_NO_OLE_SUPPORT stru
ct
AFX_DISP
MAP
_ENTRY; stru
ct
AFX_DISP
MAP
{ #ifdef _AFXDLL const AFX_DISP
MAP
* (PASCAL* pfnGetBase
Map
)(); #else const AFX_DISP
MAP
* pBase
Map
; #endif const AFX_DISP
MAP
_ENTRY* lpEntries; UINT* lpEntryCount; DWORD* lpStockPropMask; }; #ifdef _AFXDLL #define DECLARE_DISPATCH_
MAP
() \ private: \ static const AFX_DISP
MAP
_ENTRY _dispatchEntries[]; \ static UINT _dispatchEntryCount; \ static DWORD _dwStockPropMask; \ prote
ct
ed: \ static AFX_DATA const AFX_DISP
MAP
dispatch
Map
; \ static const AFX_DISP
MAP
* PASCAL _GetBaseDispatch
Map
(); \ virtual const AFX_DISP
MAP
* GetDispatch
Map
() const; \ #else #define DECLARE_DISPATCH_
MAP
() \ private: \ static const AFX_DISP
MAP
_ENTRY _dispatchEntries[]; \ static UINT _dispatchEntryCount; \ static DWORD _dwStockPropMask; \ prote
ct
ed: \ static AFX_DATA const AFX_DISP
MAP
dispatch
Map
; \ virtual const AFX_DISP
MAP
* GetDispatch
Map
() const; \ #endif #endif //!_AFX_NO_OLE_SUPPORT ///////////////////////////////////////////////////////////////////////////// // OLE Document Obje
ct
command target handling #ifndef _AFX_NO_DOCOBJE
CT
_SUPPORT stru
ct
AFX_OLECMD
MAP
_ENTRY { const GUID* pguid; // id of the command group ULONG cmdID; // OLECMD ID UINT nID; // corresponding WM_COMMAND message ID }; stru
ct
AFX_OLECMD
MAP
{ #ifdef _AFXDLL const AFX_OLECMD
MAP
* (PASCAL* pfnGetBase
Map
)(); #else const AFX_OLECMD
MAP
* pBase
Map
; #endif const AFX_OLECMD
MAP
_ENTRY* lpEntries; }; #ifdef _AFXDLL #define DECLARE_OLECMD_
MAP
() \ private: \ static const AFX_OLECMD
MAP
_ENTRY _commandEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_OLECMD
MAP
command
Map
; \ static const AFX_OLECMD
MAP
* PASCAL _GetBaseCommand
Map
(); \ virtual const AFX_OLECMD
MAP
* GetCommand
Map
() const; \ #else #define DECLARE_OLECMD_
MAP
() \ private: \ static const AFX_OLECMD
MAP
_ENTRY _commandEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_OLECMD
MAP
command
Map
; \ virtual const AFX_OLECMD
MAP
* GetCommand
Map
() const; \ #endif #ifdef _AFXDLL #define BE
GIN
_OLECMD_
MAP
(theClass, baseClass) \ const AFX_OLECMD
MAP
* PASCAL theClass::_GetBaseCommand
Map
() \ { return &baseClass;::command
Map
; } \ const AFX_OLECMD
MAP
* theClass::GetCommand
Map
() const \ { return &theClass;::command
Map
; } \ AFX_COMDAT AFX_DATADEF const AFX_OLECMD
MAP
theClass::command
Map
= \ { &theClass;::_GetBaseCommand
Map
, &theClass;::_commandEntries[0] }; \ AFX_COMDAT const AFX_OLECMD
MAP
_ENTRY theClass::_commandEntries[] = \ { \ #else #define BE
GIN
_OLECMD_
MAP
(theClass, baseClass) \ const AFX_OLECMD
MAP
* theClass::GetCommand
Map
() const \ { return &theClass;::command
Map
; } \ AFX_COMDAT AFX_DATADEF const AFX_OLECMD
MAP
theClass::command
Map
= \ { &baseClass;::command
Map
, &theClass;::_commandEntries[0] }; \ AFX_COMDAT const AFX_OLECMD
MAP
_ENTRY theClass::_commandEntries[] = \ { \ #endif #define END_OLECMD_
MAP
() \ {NULL, 0, 0} \ }; \ class COleCmdUI; #endif //!_AFX_NO_DOCOBJE
CT
_SUPPORT ///////////////////////////////////////////////////////////////////////////// // OLE event s
ink
map
handling (more in AFXDISP.H) #ifndef _AFX_NO_OCC_SUPPORT stru
ct
AFX_
EVENTS
INK
MAP
_ENTRY; stru
ct
AFX_
EVENTS
INK
MAP
{ #ifdef _AFXDLL const AFX_
EVENTS
INK
MAP
* (PASCAL* pfnGetBase
Map
)(); #else const AFX_
EVENTS
INK
MAP
* pBase
Map
; #endif const AFX_
EVENTS
INK
MAP
_ENTRY* lpEntries; UINT* lpEntryCount; }; #ifdef _AFXDLL #define DECLARE_
EVENTS
INK
_
MAP
() \ private: \ static const AFX_
EVENTS
INK
MAP
_ENTRY _
events
ink
Entries[]; \ static UINT _
events
ink
EntryCount; \ prote
ct
ed: \ static AFX_DATA const AFX_
EVENTS
INK
MAP
events
ink
Map
; \ static const AFX_
EVENTS
INK
MAP
* PASCAL _GetBase
EventS
ink
Map
(); \ virtual const AFX_
EVENTS
INK
MAP
* Get
EventS
ink
Map
() const; \ #else #define DECLARE_
EVENTS
INK
_
MAP
() \ private: \ static const AFX_
EVENTS
INK
MAP
_ENTRY _
events
ink
Entries[]; \ static UINT _
events
ink
EntryCount; \ prote
ct
ed: \ static AFX_DATA const AFX_
EVENTS
INK
MAP
events
ink
Map
; \ virtual const AFX_
EVENTS
INK
MAP
* Get
EventS
ink
Map
() const; \ #endif #endif //!_AFX_NO_OCC_SUPPORT ///////////////////////////////////////////////////////////////////////////// // OLE conne
ct
ion
map
handling (more in AFXDISP.H) #ifndef _AFX_NO_OLE_SUPPORT stru
ct
AFX_CONNE
CT
ION
MAP
_ENTRY { const void* piid; // the interface id (IID) size_t nOffset; // offset of the interface vtable from m_unknown }; stru
ct
AFX_CONNE
CT
ION
MAP
{ #ifdef _AFXDLL const AFX_CONNE
CT
ION
MAP
* (PASCAL* pfnGetBase
Map
)(); // NULL is root class #else const AFX_CONNE
CT
ION
MAP
* pBase
Map
; #endif const AFX_CONNE
CT
ION
MAP
_ENTRY* pEntry; //
map
for this class }; #ifdef _AFXDLL #define DECLARE_CONNE
CT
ION_
MAP
() \ private: \ static const AFX_CONNE
CT
ION
MAP
_ENTRY _conne
ct
ionEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_CONNE
CT
ION
MAP
conne
ct
ion
Map
; \ static const AFX_CONNE
CT
ION
MAP
* PASCAL _GetBaseConne
ct
ion
Map
(); \ virtual const AFX_CONNE
CT
ION
MAP
* GetConne
ct
ion
Map
() const; \ #else #define DECLARE_CONNE
CT
ION_
MAP
() \ private: \ static const AFX_CONNE
CT
ION
MAP
_ENTRY _conne
ct
ionEntries[]; \ prote
ct
ed: \ static AFX_DATA const AFX_CONNE
CT
ION
MAP
conne
ct
ion
Map
; \ virtual const AFX_CONNE
CT
ION
MAP
* GetConne
ct
ion
Map
() const; \ #endif #endif //!_AFX_NO_OLE_SUPPORT ///////////////////////////////////////////////////////////////////////////// // CCmdTarget proper #ifndef _AFX_NO_OCC_SUPPORT class COccManager; // forward reference (see ..\src\occimpl.h) #endif #ifdef _AFXDLL class CCmdTarget : public CObje
ct
#else class AFX_NOVTABLE CCmdTarget : public CObje
ct
#endif { DECLARE_DYNAMIC(CCmdTarget) prote
ct
ed: public: // Constru
ct
ors CCmdTarget(); // Attributes LPDISPATCH GetIDispatch(BOOL bAddRef); // retrieve IDispatch part of CCmdTarget static CCmdTarget* PASCAL FromIDispatch(LPDISPATCH lpDispatch); //
map
LPDISPATCH back to CCmdTarget* (inverse of GetIDispatch) BOOL IsResultExpe
ct
ed(); // returns TRUE if automation fun
ct
ion should return a value // Operations void EnableAutomation(); // call in constru
ct
or to wire up IDispatch void EnableConne
ct
ions(); // call in constru
ct
or to wire up IConne
ct
ionPointContainer void Be
gin
WaitCursor(); void EndWaitCursor(); void RestoreWaitCursor(); // call after messagebox #ifndef _AFX_NO_OLE_SUPPORT // dispatch OLE verbs through the message
map
BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb); BOOL DoOleVerb(LONG iVerb, LPMSG lpMsg, HWND hWndParent, LPCRE
CT
lpRe
ct
); #endif // Overridables // route and dispatch standard command message types // (more sophisticated than OnCommand) virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); #ifndef _AFX_NO_OLE_SUPPORT // called when last OLE reference is released virtual void OnFinalRelease(); #endif #ifndef _AFX_NO_OLE_SUPPORT // called before dispatching to an automation handler fun
ct
ion virtual BOOL IsInvokeAllowed(DISPID dispid); #endif #ifndef _AFX_NO_OLE_SUPPORT // support for OLE type libraries void EnableTypeLib(); HRESULT GetTypeInfoOfGuid(LCID lcid, const GUID& guid, LPTYPEINFO* ppTypeInfo); virtual BOOL GetDispatchIID(IID* pIID); virtual UINT GetTypeInfoCount(); virtual
CT
ypeLibCache* GetTypeLibCache(); virtual HRESULT GetTypeLib(LCID lcid, LPTYPELIB* ppTypeLib); #endif // Implementation public: virtual ~CCmdTarget(); #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; virtual void AssertValid() const; #endif #ifndef _AFX_NO_OLE_SUPPORT void GetNotSupported(); void SetNotSupported(); #endif prote
ct
ed: friend class CView; CView* GetRoutingView(); CFrameWnd* GetRoutingFrame(); static CView* PASCAL GetRoutingView_(); static CFrameWnd* PASCAL GetRoutingFrame_(); DECLARE_MESSAGE_
MAP
() // base class - no {{ }} macros #ifndef _AFX_NO_DOCOBJE
CT
_SUPPORT DECLARE_OLECMD_
MAP
() friend class COleCmdUI; #endif #ifndef _AFX_NO_OLE_SUPPORT DECLARE_DISPATCH_
MAP
() DECLARE_CONNE
CT
ION_
MAP
() DECLARE_INTERFACE_
MAP
() #ifndef _AFX_NO_OCC_SUPPORT DECLARE_
EVENTS
INK
_
MAP
() #endif // !_AFX_NO_OCC_SUPPORT // OLE interface
map
implementation public: // data used when CCmdTarget is made OLE aware long m_dwRef; LPUNKNOWN m_pOuterUnknown; // external controlling unknown if != NULL DWORD m_xInnerUnknown; // place-holder for inner controlling unknown public: // advanced operations void EnableAggregation(); // call to enable aggregation void ExternalDisconne
ct
(); // forcibly disconne
ct
LPUNKNOWN GetControllingUnknown(); // get controlling IUnknown for aggregate creation // these versions do not delegate to m_pOuterUnknown DWORD InternalQueryInterface(const void*, LPVOID* ppvObj); DWORD InternalAddRef(); DWORD InternalRelease(); // these versions delegate to m_pOuterUnknown DWORD ExternalQueryInterface(const void*, LPVOID* ppvObj); DWORD ExternalAddRef(); DWORD ExternalRelease(); // implementation helpers LPUNKNOWN GetInterface(const void*); LPUNKNOWN QueryAggregates(const void*); // advanced overrideables for implementation virtual BOOL OnCreateAggregates(); virtual LPUNKNOWN GetInterfaceHook(const void*); // OLE automation implementation prote
ct
ed: stru
ct
XDispatch { DWORD m_vtbl; // place-holder for IDispatch vtable #ifndef _AFX_NO_NESTED_DERIVATION size_t m_nOffset; #endif } m_xDispatch; BOOL m_bResultExpe
ct
ed; // member variable-based properties void GetStandardProp(const AFX_DISP
MAP
_ENTRY* pEntry, VARIANT* pvarResult, UINT* puArgErr); SCODE SetStandardProp(const AFX_DISP
MAP
_ENTRY* pEntry, DISPPARAMS* pDispParams, UINT* puArgErr); // DISPID to dispatch
map
lookup static UINT PASCAL GetEntryCount(const AFX_DISP
MAP
* pDisp
Map
); const AFX_DISP
MAP
_ENTRY* PASCAL GetDispEntry(LONG memid); static LONG PASCAL MemberIDFromName(const AFX_DISP
MAP
* pDisp
Map
, LP
CT
STR lpszName); // helpers for member fun
ct
ion calling implementation static UINT PASCAL GetStackSize(const BYTE* pbParams, VARTYPE vtResult); #ifdef _PPC_ SCODE PushStackArgs(BYTE* pStack, const BYTE* pbParams, void* pResult, VARTYPE vtResult, DISPPARAMS* pDispParams, UINT* puArgErr, VARIANT* rgTempVars, UINT nSizeArgs); #else SCODE PushStackArgs(BYTE* pStack, const BYTE* pbParams, void* pResult, VARTYPE vtResult, DISPPARAMS* pDispParams, UINT* puArgErr, VARIANT* rgTempVars); #endif SCODE CallMemberFunc(const AFX_DISP
MAP
_ENTRY* pEntry, WORD wFlags, VARIANT* pvarResult, DISPPARAMS* pDispParams, UINT* puArgErr); friend class COleDispatchImpl; #ifndef _AFX_NO_OCC_SUPPORT public: // OLE event s
ink
implementation BOOL OnEvent(UINT id
Ct
rl, AFX_EVENT* pEvent, AFX_CMDHANDLERINFO* pHandlerInfo); prote
ct
ed: const AFX_
EVENTS
INK
MAP
_ENTRY* PASCAL Get
EventS
ink
Entry(UINT id
Ct
rl, AFX_EVENT* pEvent); #endif // !_AFX_NO_OCC_SUPPORT // OLE conne
ct
ion implementation stru
ct
XConnPtContainer { DWORD m_vtbl; // place-holder for IConne
ct
ionPointContainer vtable #ifndef _AFX_NO_NESTED_DERIVATION size_t m_nOffset; #endif } m_xConnPtContainer; #ifdef _AFXDLL AFX_MODULE_STATE* m_pModuleState; friend class CInnerUnknown; friend UINT APIENTRY _AfxThreadEntry(void* pParam); #endif virtual BOOL GetExtraConne
ct
ionPoints(CPtrArray* pConnPoints); virtual LPCONNE
CT
IONPOINT GetConne
ct
ionHook(const IID& iid); friend class COleConnPtContainer; #endif //!_AFX_NO_OLE_SUPPORT }; class CCmdUI // simple helper class { public: // Attributes UINT m_nID; UINT m_nIndex; // menu item or other index // if a menu item CMenu* m_pMenu; // NULL if not a menu CMenu* m_pSubMenu; // sub containing menu item // if a popup sub menu - ID is for first in popup // if from some other window CWnd* m_pOther; // NULL if a menu or not a CWnd // Operations to do in ON_UPDATE_COMMAND_UI virtual void Enable(BOOL bOn = TRUE); virtual void SetCheck(int nCheck = 1); // 0, 1 or 2 (indeterminate) virtual void SetRadio(BOOL bOn = TRUE); virtual void SetText(LP
CT
STR lpszText); // Advanced operation void ContinueRouting(); // Implementation CCmdUI(); BOOL m_bEnableChanged; BOOL m_bContinueRouting; UINT m_nIndexMax; // last + 1 for iterating m_nIndex CMenu* m_pParentMenu; // NULL if parent menu not easily determined // (probably a secondary popup menu) BOOL DoUpdate(CCmdTarget* pTarget, BOOL bDisableIfNoHndler); }; // special CCmdUI derived classes are used for other UI paradigms // like toolbar buttons and status indicators // pointer to afx_msg member fun
ct
ion #ifndef AFX_MSG_CALL #define AFX_MSG_CALL #endif typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void); enum AFX_DISP
MAP
_FLAGS { afxDispCustom = 0, afxDispStock = 1 }; stru
ct
AFX_DISP
MAP
_ENTRY { LP
CT
STR lpszName; // member/property name long lDispID; // DISPID (may be DISPID_UNKNOWN) LPCSTR lpszParams; // member parameter description WORD vt; // return value type / or type of property AFX_PMSG pfn; // normal member On or, OnGet AFX_PMSG pfnSet; // special member for OnSet size_t nPropOffset; // property offset AFX_DISP
MAP
_FLAGS flags;// flags (e.g. stock/custom) }; stru
ct
AFX_
EVENTS
INK
MAP
_ENTRY { AFX_DISP
MAP
_ENTRY dispEntry; UINT n
Ct
rlIDFirst; UINT n
Ct
rlIDLast; }; // DSC S
ink
state/reason codes passed to MFC user event handlers enum DSCSTATE { dscNoState = 0, dscOKToDo, dscCancelled, dscSyncBefore, dscAboutToDo, dscFailedToDo, dscSyncAfter, dscDidEvent }; enum DSCREASON { dscNoReason = 0, dscClose, dscCommit, dscDelete, dscEdit, dscInsert, dscModify, dscMove }; ///////////////////////////////////////////////////////////////////////////// // CWnd implementation // stru
ct
ures (see afxext.h) stru
ct
CCreateContext; // context for creating things stru
ct
CPrintInfo; // print preview customization info stru
ct
AFX_MSG
MAP
_ENTRY { UINT nMessage; // windows message UINT nCode; // control code or WM_NOTIFY code UINT nID; // control ID (or 0 for windows messages) UINT nLastID; // used for entries specifying a range of control id's UINT nSig; // signature type (a
ct
ion) or pointer to message # AFX_PMSG pfn; // routine to call (or special value) }; ///////////////////////////////////////////////////////////////////////////// // CWnd - a Microsoft Windows application window class COleDropTarget; // for more information see AFXOLE.H class COleControlContainer; class COleControlSite; // CWnd::m_nFlags (generic to CWnd) #define WF_TOOLTIPS 0x0001 // window is enabled for tooltips #define WF_TEMPHIDE 0x0002 // window is temporarily hidden #define WF_STAYDISABLED 0x0004 // window should stay disabled #define WF_MODALLOOP 0x0008 // currently in modal loop #define WF_CONTINUEMODAL 0x0010 // modal loop should continue running #define WF_OLE
CT
LCONTAINER 0x0100 // some descendant is an OLE control #define WF_TRACKINGTOOLTIPS 0x0400 // window is enabled for tracking tooltips // CWnd::m_nFlags (specific to CFrameWnd) #define WF_STAYA
CT
IVE 0x0020 // look a
ct
ive even though not a
ct
ive #define WF_NOPOPMSG 0x0040 // ignore WM_POPMESSAGESTRING calls #define WF_MODALDISABLE 0x0080 // window is disabled #define WF_KEEPMINIA
CT
IVE 0x0200 // stay a
ct
ivate even though you are dea
ct
ivated // flags for CWnd::RunModalLoop #define ML
手机图片浏览器
// PhonePi
ct
ure
Dlg
.cpp : implementation file // #include "stdafx.h" #include "PhonePi
ct
ure.h" #include "PhonePi
ct
ure
Dlg
.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAbout
Dlg
dialog
used for App About class CAbout
Dlg
: public C
Dialog
{ public: CAbout
Dlg
(); //
Dialog
Data //{{AFX_DATA(CAbout
Dlg
) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual fun
ct
ion overrides //{{AFX_VIRTUAL(CAbout
Dlg
) prote
ct
ed: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation prote
ct
ed: //{{AFX_MSG(CAbout
Dlg
) //}}AFX_MSG DECLARE_MESSAGE_
MAP
() }; CAbout
Dlg
::CAbout
Dlg
() : C
Dialog
(CAbout
Dlg
::IDD) { //{{AFX_DATA_INIT(CAbout
Dlg
) //}}AFX_DATA_INIT } void CAbout
Dlg
::DoDataExchange(CDataExchange* pDX) { C
Dialog
::DoDataExchange(pDX); //{{AFX_DATA_
MAP
(CAbout
Dlg
) //}}AFX_DATA_
MAP
} BE
GIN
_MESSAGE_
MAP
(CAbout
Dlg
, C
Dialog
) //{{AFX_MSG_
MAP
(CAbout
Dlg
) // No message handlers //}}AFX_MSG_
MAP
END_MESSAGE_
MAP
() ///////////////////////////////////////////////////////////////////////////// // CPhonePi
ct
ure
Dlg
dialog
CPhonePi
ct
ure
Dlg
::CPhonePi
ct
ure
Dlg
(CWnd* pParent /*=NULL*/) : C
Dialog
(CPhonePi
ct
ure
Dlg
::IDD, pParent) { //{{AFX_DATA_INIT(CPhonePi
ct
ure
Dlg
) m_PicWidth = 0; m_PicHigh = 0; m_address = _T(""); m_MouseX = 0; m_MouseY = 0; m_PicEditAdd = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CPhonePi
ct
ure
Dlg
::DoDataExchange(CDataExchange* pDX) { C
Dialog
::DoDataExchange(pDX); //{{AFX_DATA_
MAP
(CPhonePi
ct
ure
Dlg
) DDX_Control(pDX, IDC_COMBO1, m_buchang); DDX_Control(pDX, IDC_PI
CT
YPE, m_pi
ct
ype); DDX_Text(pDX, IDC_WIDTH, m_PicWidth); DDX_Text(pDX, IDC_HIGH, m_PicHigh); DDV_MinMaxInt(pDX, m_PicHigh, 0, 1000); DDX_Control(pDX, IDC_IMAGE1, m_image); DDX_Control(pDX, IDC_SCROLLBAR_Horizontal, m_HORScrollBar); DDX_Control(pDX, IDC_SCROLLBAR_Vertical, m_VERScrollBar); DDX_Text(pDX, IDC_ADDRESS, m_address); DDX_Control(pDX, IDC_SCROLLBAR_Horizontal2, m_width); DDX_Control(pDX, IDC_SCROLLBAR_Horizontal3, m_high); DDX_Text(pDX, IDC_EDIT1, m_MouseX); DDX_Text(pDX, IDC_EDIT2, m_MouseY); DDX_Control(pDX, IDC_SCROLLBAR_Horizontal4, m_PicNum); DDX_Text(pDX, IDC_EDIT3, m_PicEditAdd); //}}AFX_DATA_
MAP
} BE
GIN
_MESSAGE_
MAP
(CPhonePi
ct
ure
Dlg
, C
Dialog
) //{{AFX_MSG_
MAP
(CPhonePi
ct
ure
Dlg
) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND(IDC_FILE_EXIT, OnFileExit) ON_EN_CHANGE(IDC_WIDTH, OnChangeWidth) ON_EN_CHANGE(IDC_HIGH, OnChangeHigh) ON_COMMAND(IDC_FILE_OPEN, OnFileOpen) ON_COMMAND(IDC_FILE_SAVE, OnFileSave) ON_COMMAND(IDC_FILE_SAVEAS, OnFileSaveas) ON_UPDATE_COMMAND_UI(IDC_FILE_SAVE, OnUpdateFileSave) ON_CBN_SELCHANGE(IDC_PI
CT
YPE, OnSelchangePi
ct
ype) ON_WM_TIMER() ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1) ON_EN_CHANGE(IDC_ADDRESS, OnChangeAddress) ON_COMMAND(IDC_PI
CT
URE_EDITLAYOUT, OnPi
ct
ureEditlayout) ON_COMMAND(IDC_PI
CT
URE_EDITLAYIN, OnPi
ct
ureEditlayin) ON_COMMAND(IDC_CUT, OnCut) ON_COMMAND(IDC_PASE, OnPase) ON_BN_CLICKED(IDC_RADIO1, OnRadio1) ON_BN_CLICKED(IDC_RADIO2, OnRadio2) ON_BN_CLICKED(IDC_RADIO3, OnRadio3) ON_BN_CLICKED(IDC_RADIO4, OnRadio4) //}}AFX_MSG_
MAP
END_MESSAGE_
MAP
() ///////////////////////////////////////////////////////////////////////////// // CPhonePi
ct
ure
Dlg
message handlers BOOL CPhonePi
ct
ure
Dlg
::OnInit
Dialog
() { C
Dialog
::OnInit
Dialog
(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this
dialog
. The framework does this automatically // when the application's main window is not a
dialog
SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CPoint point; // TODO: Add extra initialization here m_pi
ct
ype.SetWindowText("16貫廬꽈"); PI
CT
YPE=5; m_PicHigh=220; m_PicWidth=176; PicHigh=220; PicWidth=176; UpdateData(false); STEPX=STEPY=0; buchang=0; m_address="0x0"; m_width.SetMax(1560); m_width.SetValue(540); m_high.SetMax (560); m_high.SetValue(540); Sele
ct
Pic=0; LoadRosoure(); fileready=0; needadd=0; STARTADD=0x9a47bc; needpack=0; return TRUE; } void CPhonePi
ct
ure
Dlg
::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAbout
Dlg
dlg
About;
dlg
About.DoModal(); } else { C
Dialog
::OnSysCommand(nID, lParam); } } // If you add a minimize button to your
dialog
, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CPhonePi
ct
ure
Dlg
::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client re
ct
angle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRe
ct
re
ct
; GetClientRe
ct
(&re
ct
;); int x = (re
ct
.Width() - cxIcon + 1) / 2; int y = (re
ct
.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { C
Dialog
::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CPhonePi
ct
ure
Dlg
::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CPhonePi
ct
ure
Dlg
::OnOK() { // TODO: Add extra validation here C
Dialog
::OnOK(); } void CPhonePi
ct
ure
Dlg
::OnFileExit() { // TODO: Add your command handler code here OnOK() ; } BOOL CPhonePi
ct
ure
Dlg
::LoadRosoure() { HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_BMPTITLE), TEXT("BIN")); if (NULL == hRsrc) return FALSE; //삿혤栗都돨댕鬼 DWORD dwSize = SizeofResource(NULL, hRsrc); if (0 == dwSize) return FALSE; //속潼栗都 HGLOBAL hGlobal = LoadResource(NULL, hRsrc); if (NULL == hGlobal) return FALSE; //傑땍栗都 LPVOID pBuffer = LockResource(hGlobal); if (NULL == pBuffer) return FALSE; else { BmpTitleBuf=(char*)pBuffer; BmpTitleSize=dwSize; } loadpi
ct
ab(); return TRUE; } void CPhonePi
ct
ure
Dlg
::OnChangeWidth() { UpdateData(true); PicWidth=m_PicWidth; PicXNum=312/PicWidth; } void CPhonePi
ct
ure
Dlg
::OnChangeHigh() { UpdateData(true); PicHigh=m_PicHigh; PicYNum=258/PicHigh; } void CPhonePi
ct
ure
Dlg
::OnFileOpen() { char szFileFilter[]= "BIN File(*.Bin)|*.Bin|" "SKD File(*.SKD)|*.SKD|" "BMP File(*.BMP)|*.BMP|" "BMP File(*.DAT)|*.DAT|" "All File(*.*)|*.*|"; CFile
Dialog
dlg
(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(
dlg
.DoModal()==IDOK) { FileName=
dlg
.GetPathName(); //뭐芚CFile뚤蹶 CFile File(FileName,CFile::modeRead); //롸토뻠녑혐,댕鬼槨匡숭댕鬼 FileSize=File.GetLength(); FileBuf = (char*) malloc(FileSize); File.ReadHuge(FileBuf,FileSize); File.Close(); m_HORScrollBar.SetMax(FileSize/65536) ; fileready=1; int k; switch(PI
CT
YPE) { case 0: k=1; break; case 1: k=1; break; case 2: k=1; break; case 3: k=1; break; case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=3; break; case 8: k=3; break; case 9: k=2; break; } m_VERScrollBar.SetMax(65536/k); SetTimeOn(50); } } void CPhonePi
ct
ure
Dlg
::OnFileSave() { // TODO: Add your command handler code here CFile File(FileName, CFile::modeCreate | CFile::modeWrite); File.WriteHuge(FileBuf,FileSize); File.Close(); } void CPhonePi
ct
ure
Dlg
::OnFileSaveas() { char szFileFilter[]= "BIN File(*.Bin)|*.Bin|" "SKD File(*.SKD)|*.SKD|" "All File(*.*)|*.*|"; CFile
Dialog
Sele
ct
File(FALSE,NULL,"",OFN_HIDEREADONLY,szFileFilter,NULL); Sele
ct
File.m_ofn.lpstrTitle="朞嶝狼괏닸돨匡숭"; if(Sele
ct
File.DoModal()==IDOK) { FileName=Sele
ct
File.GetPathName(); CFile File(FileName, CFile::modeCreate | CFile::modeWrite); File.WriteHuge(FileBuf,FileSize); File.Close(); } } BE
GIN
_
EVENTS
INK
_
MAP
(CPhonePi
ct
ure
Dlg
, C
Dialog
) //{{AFX_
EVENTS
INK
_
MAP
(CPhonePi
ct
ure
Dlg
) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_IMAGE1, -607 /* MouseUp */, OnMouseUpImage1, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_IMAGE1, -606 /* MouseMove */, OnMouseMoveImage1, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal, 2 /* Change */, OnChangeSCROLLBARHorizontal, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Vertical, 2 /* Change */, OnChangeSCROLLBARVertical, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal, 7 /* Scroll */, OnScrollSCROLLBARHorizontal, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Vertical, 7 /* Scroll */, OnScrollSCROLLBARVertical, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal2, 2 /* Change */, OnChangeSCROLLBARHorizontal2, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal2, 7 /* Scroll */, OnScrollSCROLLBARHorizontal2, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal3, 2 /* Change */, OnChangeSCROLLBARHorizontal3, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal3, 7 /* Scroll */, OnScrollSCROLLBARHorizontal3, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_IMAGE1, -601 /* DblClick */, OnDblClickImage1, VTS_DISPATCH) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal4, 2 /* Change */, OnChangeSCROLLBARHorizontal4, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal4, 7 /* Scroll */, OnScrollSCROLLBARHorizontal4, VTS_NONE) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_IMAGE1, 3 /* BeforeDragOver */, OnBeforeDragOverImage1, VTS_DISPATCH VTS_DISPATCH VTS_R4 VTS_R4 VTS_I4 VTS_DISPATCH VTS_I2) ON_EVENT(CPhonePi
ct
ure
Dlg
, IDC_SCROLLBAR_Horizontal2, 3 /* BeforeDragOver */, OnBeforeDragOverSCROLLBARHorizontal2, VTS_DISPATCH VTS_DISPATCH VTS_R4 VTS_R4 VTS_I4 VTS_DISPATCH VTS_I2) //}}AFX_
EVENTS
INK
_
MAP
END_
EVENTS
INK
_
MAP
() void CPhonePi
ct
ure
Dlg
::OnMouseUpImage1(short Button, short Shift, float X, float Y) { // TODO: Add your control notification handler code here if(Button==2&&fileready;==1) { CMenu *m_pMenu; CMenu menu; menu.LoadMenu(IDR_MAIN_MENU); m_pMenu = menu.GetSubMenu(1); m_pMenu->TrackPopupMenu(TPM_CENTERALIGN + TPM_LEFTBUTTON, int(X + 515),int(Y+450) ,this,NULL); } } void CPhonePi
ct
ure
Dlg
::OnUpdateFileSave(CCmdUI* pCmdUI) { } void CPhonePi
ct
ure
Dlg
::OnSelchangePi
ct
ype() { PI
CT
YPE=m_pi
ct
ype.GetCurSel(); int k; switch(PI
CT
YPE) { case 0: k=1; break; case 1: k=1; break; case 2: k=1; break; case 3: k=1; break; case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=3; break; case 8: k=3; break; case 9: k=2; break; } m_VERScrollBar.SetMax(65536/k); } void CPhonePi
ct
ure
Dlg
::OnMouseMoveImage1(short Button, short Shift, float X, float Y) { MousePoint.x=int(X)*4/3; MousePoint.y=(int)Y*4/3; m_MouseX= MousePoint.x; m_MouseY= MousePoint.y; UpdateData(false); } void CPhonePi
ct
ure
Dlg
::OnChangeSCROLLBARHorizontal() { STEPX=m_HORScrollBar.GetValue(); } void CPhonePi
ct
ure
Dlg
::OnTimer(UINT nIDEvent) { ShowPic(); C
Dialog
::OnTimer(nIDEvent); } void CPhonePi
ct
ure
Dlg
::SetTimeOn(int x) { int result=SetTimer(1,x,NULL); if(result==0) { MessageBox("땍珂포갛陋呵겨!."); } } void CPhonePi
ct
ure
Dlg
::ShowPic() { unsigned long add; add=STEPX*65536+STEPY+buchang; m_address=Hex2Str(add); UpdateData(false); switch(PI
CT
YPE) { case 0: ShowMoneColor(PI
CT
YPE); break; case 1: ShowMoneColor(PI
CT
YPE); break; case 2: ShowMoneColorHH(); break; case 3: ShowMoneColorH(PI
CT
YPE); break; case 4: Showcolor(8); break; case 5: Showcolor(16); break; case 6: Showcolor(24); break; case 7: Showcolor(32); break; case 8: Showcolor(22); break; case 9: Showcolor(12); break; } } void CPhonePi
ct
ure
Dlg
::Showcolor(int k)//鞫刻16貫꽈貫暠 { int i,j,p; unsigned short RGB; int w,h; unsigned long color; unsigned char R,G,B,H; CBit
map
Bit
map
,*pOldBit
map
; int x,y; int pointnum; short pointcolor; x=MousePoint.x/PicWidth; y=MousePoint.y/PicHigh; BIT
MAP
bm; CDC MemDC; CDC *pDC; unsigned char Data[499200]; PicXNum=1560/PicWidth; PicYNum=320/PicHigh; pDC=m_image.GetDC(); Bit
map
.LoadBit
map
(IDB_BIT
MAP
1);// Bit
map
.CreateBit
map
(560,320,1,24,NULL);// //retrieve information about a CBit
map
obje
ct
Bit
map
.GetObje
ct
(sizeof(BIT
MAP
),&bm;); char *gadd; if(!MemDC.CreateCompatibleDC(pDC)) return ; pOldBit
map
=(CBit
map
*)MemDC.Sele
ct
Obje
ct
(&Bit
map
;); for(h=0;h
FileSize) break; R=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+(PicWidth*PicHigh))+j*PicWidth+i); G=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+(PicWidth*PicHigh))+j*PicWidth+i); B=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+(PicWidth*PicHigh))+j*PicWidth+i); H=0; break; break; case 16: if(STEPX*65536+STEPY+buchang+(h*PicXNum+w)*2*(PicWidth*PicHigh)+2*j*PicWidth+2*i>FileSize) break; gadd=FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*2*(PicWidth*PicHigh)+2*j*PicWidth+2*i; RGB=*(unsigned short*)gadd; color= ConverColor16t24(RGB); if(x==w&&y==h&Sele
ct
Pic;==1) { R=0xff-char((color&0x00ff0000;)>>16); G=0xff-char((color&0x0000ff00;)>>8); B=0xff-char(color&0x000000ff;); H=0; } else { B=char((color&0x00ff0000;)>>16); G=char((color&0x0000ff00;)>>8); R=char(color&0x000000ff;); H=0; } break; case 24: if(STEPX*65536+STEPY+buchang+(h*PicXNum+w)*3*(PicWidth*PicHigh)+3*j*PicWidth+3*i>FileSize) break; R=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+3*(PicWidth*PicHigh))+3*j*PicWidth+3*i); G=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+3*(PicWidth*PicHigh))+3*j*PicWidth+3*i+1); B=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+3*(PicWidth*PicHigh))+3*j*PicWidth+3*i+2); H=0; break; case 32: if(STEPX*65536+STEPY+buchang+(h*PicXNum+w)*4*(PicWidth*PicHigh)+4*j*PicWidth+4*i>FileSize) break; R=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+1); G=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+2); B=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+3); H=0;//*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+3); break; case 22: if(STEPX*65536+STEPY+buchang+(h*PicXNum+w)*4*(PicWidth*PicHigh)+4*j*PicWidth+4*i>FileSize) break; char tls,r,g,b; r=*(int*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+0); g=*(int*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+2); b=*(int*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i+3); color=*(int*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(8+4*(PicWidth*PicHigh))+4*j*PicWidth+4*i); tls=color&0x3; color=(color>>14)|(tls); R=(color>>12)*255/63; G=((color>>6)&0x3f;)*255/63; B=(color&0x3f;)*255/63; /* R= ((r<<4)|((g&0xf0;)>>4))*255/63; G= (((g&0x0f;)<<2)|((b&0xc0;)>>6))*255/63; B= (b&0x3f;)*255/63; */ H=0; break; case 12: if(STEPX*65536+STEPY+buchang+(h*PicXNum+w)*2*(PicWidth*PicHigh)+2*j*PicWidth+2*i>FileSize) break; gadd=FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*2*(PicWidth*PicHigh)+2*j*PicWidth+2*i; RGB=*(unsigned short*)gadd; color= ConverColor12t24(RGB); if(x==w&&y==h&Sele
ct
Pic;==1) { B=0xff-char((color&0x00ff0000;)>>16); G=0xff-char((color&0x0000ff00;)>>8); R=0xff-char(color&0x000000ff;); H=0; } else { R=char((color&0x00ff0000;)>>16); G=char((color&0x0000ff00;)>>8); B=char(color&0x000000ff;); H=0; } break; } p=(h*PicHigh+j)*(bm.bmWidth)+w*PicWidth+i; Data[4*p]=B; Data[4*p+1]=G; Data[4*p+2]=R; Data[4*p+3]=H; } Bit
map
.SetBit
map
Bits(bm.bmHeight*bm.bmWidthBytes ,Data); pDC->BitBlt(1,1,bm.bmWidth,bm.bmHeight,&MemDC;,0,0,SRCCOPY); MemDC.Sele
ct
Obje
ct
(pOldBit
map
); pDC->DeleteDC(); } unsigned long CPhonePi
ct
ure
Dlg
::ConverColor16t24(short D)//瘻뻣16貫槨24貫꽈 { int r,g,b; unsigned long color; if (D==0 || D==0xffff) return D; r=D&0xf800; r=r>>11; r=r*255/31; g=((D&0x7e0;)>>5)*255/63; b=(D&0x1f;)*255/31; color=b<<16|g<<8|r; return color; } void CPhonePi
ct
ure
Dlg
::OnChangeSCROLLBARVertical() { // TODO: Add your control notification handler code here int k; switch(PI
CT
YPE) { case 0: k=1; break; case 1: k=1; break; case 2: k=1; break; case 3: k=1; break; case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=4; break; case 8: k=2; break; case 9: k=2; } STEPY=k*m_VERScrollBar.GetValue(); } void CPhonePi
ct
ure
Dlg
::OnScrollSCROLLBARHorizontal() { // TODO: Add your control notification handler code here STEPX=m_HORScrollBar.GetValue(); } void CPhonePi
ct
ure
Dlg
::OnScrollSCROLLBARVertical() { // TODO: Add your control notification handler code here int k; switch(PI
CT
YPE) { case 0: k=1; break; case 1: k=1; break; case 2: k=1; break; case 3: k=1; break; case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=4; break; case 8: k=2; break; case 9: k=2; } STEPY=k*m_VERScrollBar.GetValue(); } CString CPhonePi
ct
ure
Dlg
::Hex2Str(unsigned long add) { char s; unsigned int i,h; CString retdata; retdata="0x"; if(add==0) return "0x0"; int k; for(i=0;i<8;i++) { h=add<<(i*4); h=h>>28; s=ConvertHex2Char(h); if(s!=0x30||k==1 ) { retdata+=s; k=1; } } return retdata; } char CPhonePi
ct
ure
Dlg
::ConvertHex2Char(int hex) { char retdata; switch(hex) { case 0: retdata='0'; break; case 1: retdata='1'; break; case 2: retdata='2'; break; case 3: retdata='3'; break; case 4: retdata='4'; break; case 5: retdata='5'; break; case 6: retdata='6'; break; case 7: retdata='7'; break; case 8: retdata='8'; break; case 9: retdata='9'; break; case 10: retdata='A'; break; case 11: retdata='B'; break; case 12: retdata='C'; break; case 13: retdata='D'; break; case 14: retdata='E'; break; case 15: retdata='F'; break; } return retdata; } void CPhonePi
ct
ure
Dlg
::OnSelchangeCombo1() { // TODO: Add your control notification handler code here buchang=m_buchang.GetCurSel(); } void CPhonePi
ct
ure
Dlg
::OnChangeAddress() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the C
Dialog
::OnInit
Dialog
() // fun
ct
ion and call CRichEdit
Ct
rl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here KillTimer(1); CString data; UpdateData(true); data=m_address; long address=Str2Hex(data); STEPX=address/65536; STEPY=(addresse536); //m_VERScrollBar.SetValue(STEPY); // OnScrollSCROLLBARVertical(); SetTimeOn(50); } unsigned long CPhonePi
ct
ure
Dlg
::Str2Hex(CString address) { unsigned long returndata; int len,i,k,h; len=address.GetLength(); CString s; char d; k=0; returndata=0; if(len>2) { s=address[0]; s+=address[1]; if(s=="0x"|s=="0X") for(i=2;i
cture
Dlg
::ConvertCharHex(char ch) { if((ch>='0')&&(ch<='9')) return ch-0x30; else if((ch>='A')&&(ch<='F')) return ch-'A'+10; else if((ch>='a')&&(ch<='f')) return ch-'a'+10; else return (-1); } void CPhonePi
ct
ure
Dlg
::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class C
Dialog
::PreSubclassWindow(); } void CPhonePi
ct
ure
Dlg
::ShowMoneColor(int k) { int i,j,p; char RGB; int w,h; unsigned char R,G,B; CBit
map
Bit
map
,*pOldBit
map
; BIT
MAP
bm; CDC MemDC; CDC *pDC; unsigned char Data[499200]; PicXNum=560/(8*PicWidth); PicYNum=320/PicHigh; pDC=m_image.GetDC(); Bit
map
.LoadBit
map
(IDB_BIT
MAP
1);// Bit
map
.CreateBit
map
(560,320,1,24,NULL);// //retrieve information about a CBit
map
obje
ct
Bit
map
.GetObje
ct
(sizeof(BIT
MAP
),&bm;); if(!MemDC.CreateCompatibleDC(pDC)) return ; pOldBit
map
=(CBit
map
*)MemDC.Sele
ct
Obje
ct
(&Bit
map
;); long picwidth=bm.bmWidth; for(h=0;h
FileSize) return; RGB=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(PicWidth*PicHigh)+PicWidth*j+i); for(int m=0;m<8;m++) { R=RGB>>7-m; R=R&0x1; if(R ) { B=0; G=0; R=0; } else { B=255; G=255; R=255; } p=(h*PicHigh+j)*(picwidth)+8*w*PicWidth+8*i+m; Data[4*p]=B; Data[4*p+1]=G; Data[4*p+2]=R; Data[4*p+3]=0; } } Bit
map
.SetBit
map
Bits(bm.bmHeight*bm.bmWidthBytes ,Data); pDC->BitBlt(1,1,bm.bmWidth,bm.bmHeight,&MemDC;,0,0,SRCCOPY); MemDC.Sele
ct
Obje
ct
(pOldBit
map
); pDC->DeleteDC(); } void CPhonePi
ct
ure
Dlg
::ShowMoneColorHH() { int i,j,p; unsigned char RGB; int w,h; unsigned char R,G,B; CBit
map
Bit
map
,*pOldBit
map
; BIT
MAP
bm; CDC MemDC; CDC *pDC; unsigned char Data[499200]; PicXNum=560/(PicWidth); PicYNum=320/(8*PicHigh); pDC=m_image.GetDC(); Bit
map
.LoadBit
map
(IDB_BIT
MAP
1);// Bit
map
.CreateBit
map
(560,320,1,24,NULL);// //retrieve information about a CBit
map
obje
ct
Bit
map
.GetObje
ct
(sizeof(BIT
MAP
),&bm;); if(!MemDC.CreateCompatibleDC(pDC)) return ; pOldBit
map
=(CBit
map
*)MemDC.Sele
ct
Obje
ct
(&Bit
map
;); long picwidth=bm.bmWidth; for(h=0;h
FileSize) return; RGB=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(PicWidth*PicHigh)+PicWidth*j+i); for(int m=0;m<8;m++) { R=RGB>>7-m; R=R&0x1; if(R ) { B=0; G=0; R=0; } else { B=255; G=255; R=255; } p=(h*PicHigh*8+j*8+7-m)*picwidth+w*PicWidth+i; Data[4*p]=B; Data[4*p+1]=G; Data[4*p+2]=R; Data[4*p+3]=0; } } Bit
map
.SetBit
map
Bits(bm.bmHeight*bm.bmWidthBytes ,Data); pDC->BitBlt(1,1,bm.bmWidth,bm.bmHeight,&MemDC;,0,0,SRCCOPY); MemDC.Sele
ct
Obje
ct
(pOldBit
map
); pDC->DeleteDC(); } void CPhonePi
ct
ure
Dlg
::ShowMoneColorH(int k) { int i,j,p; char RGB; int w,h; unsigned char R,G,B; CBit
map
Bit
map
,*pOldBit
map
; BIT
MAP
bm; CDC MemDC; CDC *pDC; unsigned char Data[499200]; PicXNum=560/(PicWidth); PicYNum=320/(8*PicHigh); pDC=m_image.GetDC(); Bit
map
.LoadBit
map
(IDB_BIT
MAP
1);// Bit
map
.CreateBit
map
(560,320,1,24,NULL);// //retrieve information about a CBit
map
obje
ct
Bit
map
.GetObje
ct
(sizeof(BIT
MAP
),&bm;); if(!MemDC.CreateCompatibleDC(pDC)) return ; pOldBit
map
=(CBit
map
*)MemDC.Sele
ct
Obje
ct
(&Bit
map
;); long picwidth=bm.bmWidth; for(h=0;h
FileSize) return; RGB=*(unsigned char*)(FileBuf+buchang+STEPX*65536+STEPY+(h*PicXNum+w)*(PicWidth*PicHigh)+PicHigh*j+i); for(int m=0;m<8;m++) { R=RGB>>7-m; R=R&0x1; if(R ) { B=0; G=0; R=0; } else { B=255; G=255; R=255; } p=(8*h*PicHigh+8*i+7-m)*(picwidth)+w*PicWidth+j; Data[4*p]=B; Data[4*p+1]=G; Data[4*p+2]=R; Data[4*p+3]=0; } } Bit
map
.SetBit
map
Bits(bm.bmHeight*bm.bmWidthBytes ,Data); pDC->BitBlt(1,1,bm.bmWidth,bm.bmHeight,&MemDC;,0,0,SRCCOPY); MemDC.Sele
ct
Obje
ct
(pOldBit
map
); pDC->DeleteDC(); } //DEL void CPhonePi
ct
ure
Dlg
::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) //DEL { //DEL // TODO: Add your control notification handler code here //DEL PicWidth=m_slid.GetPos(); //DEL *pResult = 0; //DEL } void CPhonePi
ct
ure
Dlg
::OnChangeSCROLLBARHorizontal2() { // TODO: Add your control notification handler code here PicWidth=m_width.GetValue()+1; m_PicWidth=PicWidth; UpdateData(false); } void CPhonePi
ct
ure
Dlg
::OnScrollSCROLLBARHorizontal2() { // TODO: Add your control notification handler code here PicWidth=m_width.GetValue()+1; m_PicWidth=PicWidth; UpdateData(false); } void CPhonePi
ct
ure
Dlg
::OnChangeSCROLLBARHorizontal3() { // TODO: Add your control notification handler code here PicHigh=m_high.GetValue()+1; m_PicHigh=PicHigh; UpdateData(false); } void CPhonePi
ct
ure
Dlg
::OnScrollSCROLLBARHorizontal3() { // TODO: Add your control notification handler code here PicHigh=m_high.GetValue()+1; m_PicHigh=PicHigh; UpdateData(false); } void CPhonePi
ct
ure
Dlg
::OnDblClickImage1(LPDISPATCH Cancel) { Sele
ct
Pic++; if(Sele
ct
Pic==2) Sele
ct
Pic=0; } void CPhonePi
ct
ure
Dlg
::OnPi
ct
ureEditlayout() { int x,y,numx,numy; char R,G,B; char *temp; numx=560/(PicWidth); numy=320/PicHigh; x=MousePoint.x/PicWidth; y=MousePoint.y/PicHigh; long Size; unsigned long color,TLS; unsigned short RGB; int k; switch(PI
CT
YPE) { case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=1; break; case 8: k=18; break; case 9: k=3; break; } Size=PicWidth*PicHigh*k; if(k!=1) { temp=(char*)malloc((PicWidth*3+4-PicWidth*3%4)*PicHigh+0x50); *(long*)(BmpTitleBuf+0x12)=PicWidth; *(long*)(BmpTitleBuf+0x16)=PicHigh; memcpy(temp,BmpTitleBuf,54); } if(k==3) { memcpy(temp+54,FileBuf+STEPX*65536+STEPY+buchang+(y*numx+x)*Size,Size); } if(k==4) { memcpy(temp+54,FileBuf+STEPX*65536+STEPY+buchang+(y*numx+x)*Size,Size); } if(k==2) { Size=PicWidth*PicHigh; for(int j=0;j
>16); G=char((color&0x0000ff00;)>>8); R=char(color&0x000000ff;); if(PicWidth*3%4!=0) { *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3)=B; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3+1)=G; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3+2)=R; } else {*(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3)=B; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3+1)=G; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3+2)=R; } } if(PicWidth*3%4!=0) Size=(PicWidth*3+4-PicWidth*3%4)*PicHigh; else Size=(PicWidth*3)*PicHigh; } if(k==18) { Size=4*PicWidth*PicHigh; for(int j=0;j
>16); G=char((color&0x0000ff00;)>>8); R=char(color&0x000000ff;); if(PicWidth*3%4!=0) { *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3)=B; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3+1)=G; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3+4-PicWidth*3%4)+i*3+2)=R; } else {*(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3)=B; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3+1)=G; *(char*)(temp+54+(PicHigh-j-1)*(PicWidth*3 )+i*3+2)=R; } } if(PicWidth*3%4!=0) Size=(PicWidth*3+4-PicWidth*3%4)*PicHigh; else Size=(PicWidth*3)*PicHigh; } if(k==1) { if(PicWidth%4!=0) Size=PicHigh*(PicWidth+4-PicWidth%4)+1078; else Size=PicHigh*(PicWidth)+1078; temp=(char*)malloc(Size); memcpy(temp,BmpTitleBuf+54,1078); *(long*)(temp+0x12)=PicWidth; *(long*)(temp+0x16)=PicHigh; *(long*)(temp+2)=Size; if(PicWidth%4!=0) for(int j=0;j
Dialog Sele
ct
File(FALSE,NULL,"",OFN_HIDEREADONLY,szFileFilter,NULL); Sele
ct
File.m_ofn.lpstrTitle="朞嶝狼괏닸돨匡숭"; if(Sele
ct
File.DoModal()==IDOK) { CString FileName=Sele
ct
File.GetPathName(); CFile File(FileName, CFile::modeCreate | CFile::modeWrite); if(k==1) File.WriteHuge(temp,Size); else File.WriteHuge(temp,Size+54); File.Close(); } free(temp); } void CPhonePi
ct
ure
Dlg
::OnPi
ct
ureEditlayin() { int x,y,numx,numy; unsigned char R,G,B; long leng; char *temp,*tempadd; CString Name; long templen; numx=560/(PicWidth); numy=320/PicHigh; x=MousePoint.x/PicWidth; y=MousePoint.y/PicHigh; long Size; int k; switch(PI
CT
YPE) { case 4: k=1; break; case 5: k=2; break; case 6: k=3; break; case 7: k=1; break; case 8: k=18; break; case 9: k=3; break; } char szFileFilter[]= "BMP File(*.BMP)|*.BMP|" "All File(*.*)|*.*|"; CFile
Dialog
dlg
(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(
dlg
.DoModal()==IDOK) { Name=
dlg
.GetPathName(); if(Name=="") return; CFile File(Name,CFile::modeRead); templen=File.GetLength(); temp = (char*) malloc(templen); File.ReadHuge(temp,templen); File.Close(); } if(Name=="") return; if(*(int*)(temp+0x12)!=PicWidth||*(int*)(temp+0x16)!=PicHigh) { MessageBox("暠튬댕鬼꼇宮륜!"); return ; } if(k==3) { Size=PicHigh*PicWidth*k; memcpy(FileBuf+STEPX*65536+STEPY+buchang+(y*numx+x)*Size,temp+54,Size); } if(k==2) { Size=PicWidth*PicHigh; if(needadd==1) { *(short*)( FileBuf+STEPX*65536+STEPY+buchang+(y*numx+x)*k*Size)=PicWidth; *(short*)( FileBuf+STEPX*65536+STEPY+buchang+(y*numx+x)*k*Size+2)=PicHigh; } if(needpack==0) for(int j=0;j
cture
Dlg
::ConverColor24t16(unsigned char R,unsigned char G,unsigned char B) { short color; float x; x=(float)R*31/255; x+=0.5; R=(char)x; x=(float)G*63; x=x/255; G=(char)x; x=(float)B*31; x=x/255; B=(char)x; color=R<<11; color+=+G<<5; color+=B; return color; } void CPhonePi
ct
ure
Dlg
::OnCut() { int x,y,numx,numy; numx=560/(PicWidth); numy=320/PicHigh; x=MousePoint.x/PicWidth; y=MousePoint.y/PicHigh; long Size; int k; switch(PI
CT
YPE) { case 5: k=2; break; case 6: k=3; break; } Size=PicWidth*PicHigh*k; PicCutTempBuf=(char*)malloc(Size); for(int i=0;i
cture
Dlg
::OnPase() { int x,y,numx,numy; numx=560/(PicWidth); numy=320/PicHigh; x=MousePoint.x/PicWidth; y=MousePoint.y/PicHigh; long Size; int k; if(PicCut!=1) return; switch(PI
CT
YPE) { case 5: k=2; break; case 6: k=3; break; } Size=PicWidth*PicHigh*k; long NewAddress=STEPX*65536+STEPY+buchang+(y*numx+x)*Size; int Count=SearchAddress(PicOldAddress,NewAddress); if(Count==0) { AfxMessageBox("匡숭櫓청唐冷돕늪뒈囹寧濾,늪暠튬옵콘청唐賈痰"); return; } for(int i=0;i
cture
Dlg
::SearchAddress(long address,long address1) { int count; count=0; for(int i=0;i
cture
Dlg
::loadpi
ct
ab() { /* HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_PI
CT
AB), TEXT("BIN")); if (NULL == hRsrc) return FALSE; //삿혤栗都돨댕鬼 DWORD dwSize = SizeofResource(NULL, hRsrc); if (0 == dwSize) return FALSE; //속潼栗都 HGLOBAL hGlobal = LoadResource(NULL, hRsrc); if (NULL == hGlobal) return FALSE; //傑땍栗都 LPVOID puffer = LockResource(hGlobal); if (NULL == puffer) return FALSE; else { TabBuf=(char*)puffer; TabLen=dwSize; } */ return TRUE; char szFileFilter[]= "BIN File(*.Bin)|*.Bin|" "SKD File(*.SKD)|*.SKD|" "BMP File(*.BMP)|*.BMP|" "All File(*.*)|*.*|"; CFile
Dialog
dlg
(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(
dlg
.DoModal()==IDOK) { FileName=
dlg
.GetPathName(); CFile File(FileName,CFile::modeRead); TabLen=File.GetLength(); TabBuf=(char*) malloc(TabLen); File.ReadHuge(TabBuf,TabLen); File.Close(); m_PicNum.SetMax(TabLen/4); } return TRUE; } void CPhonePi
ct
ure
Dlg
::OnChangeSCROLLBARHorizontal4() { int k; if(needadd!=0) { k=m_PicNum.GetValue(); PicEditAdd=*(long*)(TabBuf+k*4); m_PicEditAdd=Hex2Str(PicEditAdd); PicWidth=*(unsigned short*)(FileBuf+PicEditAdd); PicHigh=*(unsigned short*)(FileBuf+PicEditAdd+2); m_PicWidth=PicWidth; m_PicHigh=PicHigh; UpdateData(false); } else STEPY+=PicWidth*PicHigh*2; } void CPhonePi
ct
ure
Dlg
::OnScrollSCROLLBARHorizontal4() { int k; if(needadd!=0) { k=m_PicNum.GetValue(); PicEditAdd=*(long*)(TabBuf+k*4); m_PicEditAdd=Hex2Str(PicEditAdd); PicWidth=*(unsigned short*)(FileBuf+PicEditAdd); PicHigh=*(unsigned short*)(FileBuf+PicEditAdd+2); m_PicWidth=PicWidth; m_PicHigh=PicHigh; UpdateData(false); } else STEPY+=PicWidth*PicHigh*2; } void CPhonePi
ct
ure
Dlg
::OnRadio1() { needadd=1; } void CPhonePi
ct
ure
Dlg
::OnRadio2() { // TODO: Add your control notification handler code here needadd=0; } void CPhonePi
ct
ure
Dlg
::OnRadio3() { // TODO: Add your control notification handler code here needpack=1; } void CPhonePi
ct
ure
Dlg
::OnRadio4() { // TODO: Add your control notification handler code here needpack=0; } long CPhonePi
ct
ure
Dlg
::packbmp(char *buf,long len) { char *pbuf,*tempadd; int x,y,num; unsigned char R,G,B; short tempdata; len=2*PicHigh*PicWidth; pbuf=(char*)malloc(len); for(int j=0;j
cture
Dlg
::ConverColor12t24(short D) { int r,g,b; unsigned long color; if (D==0 || D==0xfff) return D; r=D&0xf00; r=r>>8; r=r*255/16; g=((D&0xf0;)>>4)*255/16; b=(D&0xf;)*255/16; color=b<<16|g<<8|r; return color; } unsigned long CPhonePi
ct
ure
Dlg
::ConverColor18t24(unsigned long color) { int r,g,b; unsigned long D; D=color&0x3ffff; if (D==0) return D; if(D==0X3FFFF) return 0xffffff; r=D&0x3f000; r=r>>12; r=r*255/63; g=((D&0xfc0;)>>6)*255/63; b=(D&0x3f;)*255/63; color=b<<16|g<<8|r; return color; } unsigned long CPhonePi
ct
ure
Dlg
::ConverColor24t18(unsigned char R, unsigned char G, unsigned char B) { unsigned long color; float x; color=0; R=R*63/255; G=G*63/255; B=B*63/255; color=R<<12|G<<6|B; return color; } void CPhonePi
ct
ure
Dlg
::OnBeforeDragOverImage1(LPDISPATCH Cancel, LPDISPATCH Data, float X, float Y, long DragState, LPDISPATCH Effe
ct
, short Shift) { // TODO: Add your control notification handler code here } void CPhonePi
ct
ure
Dlg
::OnBeforeDragOverSCROLLBARHorizontal2(LPDISPATCH Cancel, LPDISPATCH Data, float X, float Y, long DragState, LPDISPATCH Effe
ct
, short Shift) { // TODO: Add your control notification handler code here }
关于OCX控件批量处理响应函数
在头文件中添加 DECLARE_
EVENTS
INK
_
MAP
() CPP中:BE
GIN
_
EVENTS
INK
_
MAP
(CXXX
Dlg
, C
Dialog
)//{{AFX_
EVENTS
INK
_
MAP
(CXXX
Dlg
)ON_EVENT_RANGE(CXXX
Dlg
, IDStart, IDEnd, 4 , OnSendXXXMSG, VTS_I4,Param1.....)//}}AFX_EVENT
MFC--不允许使用继承成员问题解决方案(待补充)
最近在操作中遇到了在MFC中添加成员函数的要求,但是却出现提示“不允许使用继承成员” 附上源代码及编译结果: // dianji
Dlg
.cpp : 实现文件 // #include "stdafx.h" #include "dianji.h" #include "dianji
Dlg
.h" #include "afx
dialog
ex.h" #include "LTSMC.h" #ifdef
重载CDataGrid的函数以响应消息
Ct
rl+w在Wizard里面于class name设置datagrid所在的对话框,在Obje
ct
IDs选择IDC_DATAGRID1,在messages里面选择需要响应的消息,Wizard会自动添加如下代码:BE
GIN
_
EVENTS
INK
_
MAP
(CGridTest
Dlg
, C
Dialog
) //{{AFX_
EVENTS
INK
_
MAP
(CGridTest
Dlg
) ON_E
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章