init
commit
2407bbfac5
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,391 @@
|
|||||||
|
//*************************************************************************
|
||||||
|
// BCMenu.h : header file
|
||||||
|
// Version : 3.02
|
||||||
|
// Date : March 2002
|
||||||
|
// Author : Brent Corkum
|
||||||
|
// Email : corkum@rocscience.com
|
||||||
|
// Latest Version : http://www.rocscience.com/~corkum/BCMenu.html
|
||||||
|
//
|
||||||
|
// Bug Fixes and portions of code supplied by:
|
||||||
|
//
|
||||||
|
// Ben Ashley,Girish Bharadwaj,Jean-Edouard Lachand-Robert,
|
||||||
|
// Robert Edward Caldecott,Kenny Goers,Leonardo Zide,
|
||||||
|
// Stefan Kuhr,Reiner Jung,Martin Vladic,Kim Yoo Chul,
|
||||||
|
// Oz Solomonovich,Tongzhe Cui,Stephane Clog,Warren Stevens,
|
||||||
|
// Damir Valiulin,David Kinder,Marc Loiry
|
||||||
|
//
|
||||||
|
// You are free to use/modify this code but leave this header intact.
|
||||||
|
// This class is public domain so you are free to use it any of
|
||||||
|
// your applications (Freeware,Shareware,Commercial). All I ask is
|
||||||
|
// that you let me know so that if you have a real winner I can
|
||||||
|
// brag to my buddies that some of my code is in your app. I also
|
||||||
|
// wouldn't mind if you sent me a copy of your application since I
|
||||||
|
// like to play with new stuff.
|
||||||
|
//*************************************************************************
|
||||||
|
|
||||||
|
#ifndef BCMenu_H
|
||||||
|
#define BCMenu_H
|
||||||
|
|
||||||
|
#include <afxtempl.h>
|
||||||
|
|
||||||
|
// BCMenuData class. Fill this class structure to define a single menu item:
|
||||||
|
class BCMenuData
|
||||||
|
{
|
||||||
|
wchar_t *m_szMenuText;
|
||||||
|
public:
|
||||||
|
BCMenuData () {menuIconNormal=-1;xoffset=-1;bitmap=NULL;pContext=NULL;
|
||||||
|
nFlags=0;nID=0;syncflag=0;m_szMenuText=NULL;global_offset=-1;threeD=FALSE;};
|
||||||
|
void SetAnsiString(LPCSTR szAnsiString);
|
||||||
|
void SetWideString(const wchar_t *szWideString);
|
||||||
|
const wchar_t *GetWideString(void) {return m_szMenuText;};
|
||||||
|
~BCMenuData ();
|
||||||
|
CString GetString(void);//returns the menu text in ANSI or UNICODE
|
||||||
|
int xoffset,global_offset;
|
||||||
|
BOOL threeD;
|
||||||
|
int menuIconNormal;
|
||||||
|
UINT nFlags,nID,syncflag;
|
||||||
|
CImageList *bitmap;
|
||||||
|
void *pContext; // used to attach user data
|
||||||
|
};
|
||||||
|
|
||||||
|
//struct CMenuItemInfo : public MENUITEMINFO {
|
||||||
|
struct CMenuItemInfo : public
|
||||||
|
//MENUITEMINFO
|
||||||
|
#ifndef UNICODE //SK: this fixes warning C4097: typedef-name 'MENUITEMINFO' used as synonym for class-name 'tagMENUITEMINFOA'
|
||||||
|
tagMENUITEMINFOA
|
||||||
|
#else
|
||||||
|
tagMENUITEMINFOW
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
CMenuItemInfo()
|
||||||
|
{
|
||||||
|
memset(this, 0, sizeof(MENUITEMINFO));
|
||||||
|
cbSize = sizeof(MENUITEMINFO);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// how the menu's are drawn, either original or XP style
|
||||||
|
typedef enum {BCMENU_DRAWMODE_ORIGINAL,BCMENU_DRAWMODE_XP} BC_MenuDrawMode;
|
||||||
|
|
||||||
|
// how seperators are handled when removing a menu (Tongzhe Cui)
|
||||||
|
typedef enum {BCMENU_NONE, BCMENU_HEAD, BCMENU_TAIL, BCMENU_BOTH} BC_Seperator;
|
||||||
|
|
||||||
|
// defines for unicode support
|
||||||
|
#ifndef UNICODE
|
||||||
|
#define AppendMenu AppendMenuA
|
||||||
|
#define InsertMenu InsertMenuA
|
||||||
|
#define InsertODMenu InsertODMenuA
|
||||||
|
#define AppendODMenu AppendODMenuA
|
||||||
|
#define AppendODPopupMenu AppendODPopupMenuA
|
||||||
|
#define ModifyODMenu ModifyODMenuA
|
||||||
|
#else
|
||||||
|
#define AppendMenu AppendMenuW
|
||||||
|
#define InsertMenu InsertMenuW
|
||||||
|
#define InsertODMenu InsertODMenuW
|
||||||
|
#define AppendODMenu AppendODMenuW
|
||||||
|
#define ModifyODMenu ModifyODMenuW
|
||||||
|
#define AppendODPopupMenu AppendODPopupMenuW
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class BCMenu : public CMenu
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC( BCMenu )
|
||||||
|
public:
|
||||||
|
BCMenu();
|
||||||
|
virtual ~BCMenu();
|
||||||
|
|
||||||
|
// Functions for loading and applying bitmaps to menus (see example application)
|
||||||
|
virtual BOOL LoadMenu(LPCTSTR lpszResourceName);
|
||||||
|
virtual BOOL LoadMenu(int nResource);
|
||||||
|
BOOL LoadToolbar(UINT nToolBar);
|
||||||
|
BOOL LoadToolbars(const UINT *arID,int n);
|
||||||
|
void AddFromToolBar(CToolBar* pToolBar, int nResourceID);
|
||||||
|
BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset);
|
||||||
|
BOOL AddBitmapToImageList(CImageList *list,UINT nResourceID);
|
||||||
|
static HBITMAP LoadSysColorBitmap(int nResourceId);
|
||||||
|
void LoadCheckmarkBitmap(int unselect,int select); // custom check mark bitmaps
|
||||||
|
|
||||||
|
// functions for appending a menu option, use the AppendMenu call (see above define)
|
||||||
|
BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem=0,const char *lpszNewItem=NULL,int nIconNormal=-1);
|
||||||
|
BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset);
|
||||||
|
BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp);
|
||||||
|
BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem=0,wchar_t *lpszNewItem=NULL,int nIconNormal=-1);
|
||||||
|
BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset);
|
||||||
|
BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp);
|
||||||
|
BOOL AppendODMenuA(LPCSTR lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);
|
||||||
|
BOOL AppendODMenuW(wchar_t *lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);
|
||||||
|
BOOL AppendODMenuA(LPCSTR lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
|
||||||
|
BOOL AppendODMenuW(wchar_t *lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
|
||||||
|
|
||||||
|
// for appending a popup menu (see example application)
|
||||||
|
BCMenu* AppendODPopupMenuA(LPCSTR lpstrText);
|
||||||
|
BCMenu* AppendODPopupMenuW(wchar_t *lpstrText);
|
||||||
|
|
||||||
|
// functions for inserting a menu option, use the InsertMenu call (see above define)
|
||||||
|
BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem=0,const char *lpszNewItem=NULL,int nIconNormal=-1);
|
||||||
|
BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset);
|
||||||
|
BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp);
|
||||||
|
BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem=0,wchar_t *lpszNewItem=NULL,int nIconNormal=-1);
|
||||||
|
BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset);
|
||||||
|
BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp);
|
||||||
|
BOOL InsertODMenuA(UINT nPosition,LPCSTR lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);
|
||||||
|
BOOL InsertODMenuW(UINT nPosition,wchar_t *lpstrText,UINT nFlags = MF_OWNERDRAW,UINT nID = 0,int nIconNormal = -1);
|
||||||
|
BOOL InsertODMenuA(UINT nPosition,LPCSTR lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
|
||||||
|
BOOL InsertODMenuW(UINT nPosition,wchar_t *lpstrText,UINT nFlags,UINT nID,CImageList *il,int xoffset);
|
||||||
|
|
||||||
|
// functions for modifying a menu option, use the ModifyODMenu call (see above define)
|
||||||
|
BOOL ModifyODMenuA(const char *lpstrText,UINT nID=0,int nIconNormal=-1);
|
||||||
|
BOOL ModifyODMenuA(const char *lpstrText,UINT nID,CImageList *il,int xoffset);
|
||||||
|
BOOL ModifyODMenuA(const char *lpstrText,UINT nID,CBitmap *bmp);
|
||||||
|
BOOL ModifyODMenuA(const char *lpstrText,const char *OptionText,int nIconNormal);
|
||||||
|
BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID=0,int nIconNormal=-1);
|
||||||
|
BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID,CImageList *il,int xoffset);
|
||||||
|
BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID,CBitmap *bmp);
|
||||||
|
BOOL ModifyODMenuW(wchar_t *lpstrText,wchar_t *OptionText,int nIconNormal);
|
||||||
|
// use this method for adding a solid/hatched colored square beside a menu option
|
||||||
|
// courtesy of Warren Stevens
|
||||||
|
BOOL ModifyODMenuA(const char *lpstrText,UINT nID,COLORREF fill,COLORREF border,int hatchstyle=-1,CSize *pSize=NULL);
|
||||||
|
BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID,COLORREF fill,COLORREF border,int hatchstyle=-1,CSize *pSize=NULL);
|
||||||
|
|
||||||
|
// for deleting and removing menu options
|
||||||
|
BOOL RemoveMenu(UINT uiId,UINT nFlags);
|
||||||
|
BOOL DeleteMenu(UINT uiId,UINT nFlags);
|
||||||
|
// sPos means Seperator's position, since we have no way to find the seperator's position in the menu
|
||||||
|
// we have to specify them when we call the RemoveMenu to make sure the unused seperators are removed;
|
||||||
|
// sPos = None no seperator removal;
|
||||||
|
// = Head seperator in front of this menu item;
|
||||||
|
// = Tail seperator right after this menu item;
|
||||||
|
// = Both seperators at both ends;
|
||||||
|
// remove the menu item based on their text, return -1 if not found, otherwise return the menu position;
|
||||||
|
int RemoveMenu(char* pText, BC_Seperator sPos=BCMENU_NONE);
|
||||||
|
int RemoveMenu(wchar_t* pText, BC_Seperator sPos=BCMENU_NONE);
|
||||||
|
int DeleteMenu(char* pText, BC_Seperator sPos=BCMENU_NONE);
|
||||||
|
int DeleteMenu(wchar_t* pText, BC_Seperator sPos=BCMENU_NONE);
|
||||||
|
|
||||||
|
// Destoying
|
||||||
|
virtual BOOL DestroyMenu();
|
||||||
|
|
||||||
|
// function for retrieving and setting a menu options text (use this function
|
||||||
|
// because it is ownerdrawn)
|
||||||
|
BOOL GetMenuText(UINT id,CString &string,UINT nFlags = MF_BYPOSITION);
|
||||||
|
BOOL SetMenuText(UINT id,CString string, UINT nFlags = MF_BYPOSITION);
|
||||||
|
|
||||||
|
// Getting a submenu from it's name or position
|
||||||
|
BCMenu* GetSubBCMenu(char* lpszSubMenuName);
|
||||||
|
BCMenu* GetSubBCMenu(wchar_t* lpszSubMenuName);
|
||||||
|
CMenu* GetSubMenu (LPCTSTR lpszSubMenuName);
|
||||||
|
CMenu* GetSubMenu (int nPos);
|
||||||
|
int GetMenuPosition(char* pText);
|
||||||
|
int GetMenuPosition(wchar_t* pText);
|
||||||
|
|
||||||
|
// Drawing:
|
||||||
|
virtual void DrawItem( LPDRAWITEMSTRUCT); // Draw an item
|
||||||
|
virtual void MeasureItem( LPMEASUREITEMSTRUCT ); // Measure an item
|
||||||
|
|
||||||
|
// Static functions used for handling menu's in the mainframe
|
||||||
|
static void UpdateMenu(CMenu *pmenu);
|
||||||
|
static BOOL IsMenu(CMenu *submenu);
|
||||||
|
static BOOL IsMenu(HMENU submenu);
|
||||||
|
static LRESULT FindKeyboardShortcut(UINT nChar,UINT nFlags,CMenu *pMenu);
|
||||||
|
|
||||||
|
// Function to set how menu is drawn, either original or XP style
|
||||||
|
static void SetMenuDrawMode(UINT mode){
|
||||||
|
BCMenu::original_drawmode=mode;
|
||||||
|
BCMenu::xp_drawmode=mode;
|
||||||
|
};
|
||||||
|
// Function to set how disabled items are drawn (mode=FALSE means they are not drawn selected)
|
||||||
|
static void SetSelectDisableMode(BOOL mode){
|
||||||
|
BCMenu::original_select_disabled=mode;
|
||||||
|
BCMenu::xp_select_disabled=mode;
|
||||||
|
};
|
||||||
|
static int BCMenu::GetMenuDrawMode(void);
|
||||||
|
static BOOL BCMenu::GetSelectDisableMode(void);
|
||||||
|
|
||||||
|
// how the bitmaps are drawn in XP Luna mode
|
||||||
|
static void SetXPBitmap3D(BOOL val){
|
||||||
|
BCMenu::xp_draw_3D_bitmaps=val;
|
||||||
|
};
|
||||||
|
static BOOL GetXPBitmap3D(void){return BCMenu::xp_draw_3D_bitmaps;}
|
||||||
|
|
||||||
|
// Customizing:
|
||||||
|
// Set icon size
|
||||||
|
void SetIconSize (int, int);
|
||||||
|
// set the color in the bitmaps that is the background transparent color
|
||||||
|
void SetBitmapBackground(COLORREF color);
|
||||||
|
void UnSetBitmapBackground(void);
|
||||||
|
// obsolete functions for setting how menu images are dithered for disabled menu options
|
||||||
|
BOOL GetDisableOldStyle(void);
|
||||||
|
void SetDisableOldStyle(void);
|
||||||
|
void UnSetDisableOldStyle(void);
|
||||||
|
static COLORREF LightenColor(COLORREF col,double factor);
|
||||||
|
static COLORREF DarkenColor(COLORREF col,double factor);
|
||||||
|
|
||||||
|
// Miscellaneous Protected Member functions
|
||||||
|
protected:
|
||||||
|
static BOOL IsNewShell(void);
|
||||||
|
static BOOL IsWinXPLuna(void);
|
||||||
|
static BOOL IsLunaMenuStyle(void);
|
||||||
|
static BOOL IsWindowsClassicTheme(void);
|
||||||
|
BCMenuData *BCMenu::FindMenuItem(UINT nID);
|
||||||
|
BCMenu *FindMenuOption(int nId,int& nLoc);
|
||||||
|
BCMenu *FindAnotherMenuOption(int nId,int& nLoc,CArray<BCMenu*,BCMenu*>&bcsubs,
|
||||||
|
CArray<int,int&>&bclocs);
|
||||||
|
BCMenuData *FindMenuOption(wchar_t *lpstrText);
|
||||||
|
void InsertSpaces(void);
|
||||||
|
void DrawCheckMark(CDC *pDC,int x,int y,COLORREF color);
|
||||||
|
void DrawRadioDot(CDC *pDC,int x,int y,COLORREF color);
|
||||||
|
BCMenuData *NewODMenu(UINT pos,UINT nFlags,UINT nID,CString string);
|
||||||
|
void SynchronizeMenu(void);
|
||||||
|
void BCMenu::InitializeMenuList(int value);
|
||||||
|
void BCMenu::DeleteMenuList(void);
|
||||||
|
BCMenuData *BCMenu::FindMenuList(UINT nID);
|
||||||
|
void DrawItem_Win9xNT2000 (LPDRAWITEMSTRUCT lpDIS);
|
||||||
|
void DrawItem_WinXP (LPDRAWITEMSTRUCT lpDIS);
|
||||||
|
BOOL Draw3DCheckmark(CDC *dc, const CRect& rc,BOOL bSelected,HBITMAP hbmCheck);
|
||||||
|
BOOL DrawXPCheckmark(CDC *dc, const CRect& rc, HBITMAP hbmCheck,COLORREF &colorout);
|
||||||
|
void DitherBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth,
|
||||||
|
int nHeight, HBITMAP hbm, int nXSrc, int nYSrc,COLORREF bgcolor);
|
||||||
|
void DitherBlt2(CDC *drawdc, int nXDest, int nYDest, int nWidth,
|
||||||
|
int nHeight, CBitmap &bmp, int nXSrc, int nYSrc,COLORREF bgcolor);
|
||||||
|
BOOL GetBitmapFromImageList(CDC* pDC,CImageList *imglist,int nIndex,CBitmap &bmp);
|
||||||
|
BOOL ImageListDuplicate(CImageList *il,int xoffset,CImageList *newlist);
|
||||||
|
static WORD NumBitmapColors(LPBITMAPINFOHEADER lpBitmap);
|
||||||
|
void ColorBitmap(CDC* pDC, CBitmap& bmp,CSize bitmap_size,CSize icon_size,COLORREF fill,COLORREF border,int hatchstyle=-1);
|
||||||
|
void RemoveTopLevelOwnerDraw(void);
|
||||||
|
int GetMenuStart(void);
|
||||||
|
void GetFadedBitmap(CBitmap &bmp);
|
||||||
|
void GetShadowBitmap(CBitmap &bmp);
|
||||||
|
int AddToGlobalImageList(CImageList *il,int xoffset,int nID);
|
||||||
|
int GlobalImageListOffset(int nID);
|
||||||
|
BOOL CanDraw3DImageList(int offset);
|
||||||
|
|
||||||
|
// Member Variables
|
||||||
|
protected:
|
||||||
|
CTypedPtrArray<CPtrArray, BCMenuData*> m_MenuList; // Stores list of menu items
|
||||||
|
// When loading an owner-drawn menu using a Resource, BCMenu must keep track of
|
||||||
|
// the popup menu's that it creates. Warning, this list *MUST* be destroyed
|
||||||
|
// last item first :)
|
||||||
|
CTypedPtrArray<CPtrArray, HMENU> m_SubMenus; // Stores list of sub-menus
|
||||||
|
// Stores a list of all BCMenu's ever created
|
||||||
|
static CTypedPtrArray<CPtrArray, HMENU> m_AllSubMenus;
|
||||||
|
// Global ImageList
|
||||||
|
static CImageList m_AllImages;
|
||||||
|
static CArray<int,int&> m_AllImagesID;
|
||||||
|
// icon size
|
||||||
|
int m_iconX,m_iconY;
|
||||||
|
COLORREF m_bitmapBackground;
|
||||||
|
BOOL m_bitmapBackgroundFlag;
|
||||||
|
BOOL disable_old_style;
|
||||||
|
static UINT original_drawmode;
|
||||||
|
static BOOL original_select_disabled;
|
||||||
|
static UINT xp_drawmode;
|
||||||
|
static BOOL xp_select_disabled;
|
||||||
|
static BOOL xp_draw_3D_bitmaps;
|
||||||
|
CImageList *checkmaps;
|
||||||
|
BOOL checkmapsshare;
|
||||||
|
int m_selectcheck;
|
||||||
|
int m_unselectcheck;
|
||||||
|
BOOL m_bDynIcons;
|
||||||
|
BOOL m_loadmenu;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BCMenuToolBar : public CToolBar{
|
||||||
|
public:
|
||||||
|
BCMenuToolBar() : CToolBar() {m_iconX=m_iconY=0;}
|
||||||
|
BOOL LoadToolBar(LPCTSTR lpszResourceName);
|
||||||
|
BOOL LoadToolBar(UINT nIDResource){
|
||||||
|
return LoadToolBar(MAKEINTRESOURCE(nIDResource));
|
||||||
|
}
|
||||||
|
BOOL LoadBitmap(LPCTSTR lpszResourceName);
|
||||||
|
void GetIconSize(int &iconx,int &icony){iconx=m_iconX;icony=m_iconY;}
|
||||||
|
protected:
|
||||||
|
int m_iconX,m_iconY;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BCMENU_USE_MEMDC
|
||||||
|
|
||||||
|
#ifdef BCMENU_USE_MEMDC
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
// BCMenuMemDC - memory DC
|
||||||
|
//
|
||||||
|
// Author: Keith Rule
|
||||||
|
// Email: keithr@europa.com
|
||||||
|
// Copyright 1996-1997, Keith Rule
|
||||||
|
//
|
||||||
|
// You may freely use or modify this code provided this
|
||||||
|
// Copyright is included in all derived versions.
|
||||||
|
//
|
||||||
|
// History - 10/3/97 Fixed scrolling bug.
|
||||||
|
// Added print support.
|
||||||
|
// 25 feb 98 - fixed minor assertion bug
|
||||||
|
//
|
||||||
|
// This class implements a memory Device Context
|
||||||
|
|
||||||
|
class BCMenuMemDC : public CDC
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// constructor sets up the memory DC
|
||||||
|
BCMenuMemDC(CDC* pDC,LPCRECT lpSrcRect) : CDC()
|
||||||
|
{
|
||||||
|
ASSERT(pDC != NULL);
|
||||||
|
|
||||||
|
m_rect.CopyRect(lpSrcRect);
|
||||||
|
m_pDC = pDC;
|
||||||
|
m_pOldBitmap = NULL;
|
||||||
|
m_bMemDC = !pDC->IsPrinting();
|
||||||
|
|
||||||
|
if (m_bMemDC) // Create a Memory DC
|
||||||
|
{
|
||||||
|
CreateCompatibleDC(pDC);
|
||||||
|
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
|
||||||
|
m_pOldBitmap = SelectObject(&m_bitmap);
|
||||||
|
SetWindowOrg(m_rect.left, m_rect.top);
|
||||||
|
}
|
||||||
|
else // Make a copy of the relevent parts of the current DC for printing
|
||||||
|
{
|
||||||
|
m_bPrinting = pDC->m_bPrinting;
|
||||||
|
m_hDC = pDC->m_hDC;
|
||||||
|
m_hAttribDC = pDC->m_hAttribDC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor copies the contents of the mem DC to the original DC
|
||||||
|
~BCMenuMemDC()
|
||||||
|
{
|
||||||
|
if (m_bMemDC)
|
||||||
|
{
|
||||||
|
// Copy the offscreen bitmap onto the screen.
|
||||||
|
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
|
||||||
|
this, m_rect.left, m_rect.top, SRCCOPY);
|
||||||
|
|
||||||
|
//Swap back the original bitmap.
|
||||||
|
SelectObject(m_pOldBitmap);
|
||||||
|
} else {
|
||||||
|
// All we need to do is replace the DC with an illegal value,
|
||||||
|
// this keeps us from accidently deleting the handles associated with
|
||||||
|
// the CDC that was passed to the constructor.
|
||||||
|
m_hDC = m_hAttribDC = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow usage as a pointer
|
||||||
|
BCMenuMemDC* operator->() {return this;}
|
||||||
|
|
||||||
|
// Allow usage as a pointer
|
||||||
|
operator BCMenuMemDC*() {return this;}
|
||||||
|
|
||||||
|
private:
|
||||||
|
CBitmap m_bitmap; // Offscreen bitmap
|
||||||
|
CBitmap* m_pOldBitmap; // bitmap originally found in BCMenuMemDC
|
||||||
|
CDC* m_pDC; // Saves CDC passed in constructor
|
||||||
|
CRect m_rect; // Rectangle of drawing area.
|
||||||
|
BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//*************************************************************************
|
@ -0,0 +1,241 @@
|
|||||||
|
//
|
||||||
|
// Class: CButtonST
|
||||||
|
|
||||||
|
//
|
||||||
|
// Note: Code for the PreSubclassWindow and OnSetStyle functions
|
||||||
|
// has been taken from the COddButton class
|
||||||
|
// published by Paolo Messina and Jerzy Kaczorowski
|
||||||
|
//
|
||||||
|
// Disclaimer
|
||||||
|
// ----------
|
||||||
|
// THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT
|
||||||
|
// ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO REPONSIBILITIES FOR POSSIBLE
|
||||||
|
// DAMAGES OR EVEN FUNCTIONALITY CAN BE TAKEN. THE USER MUST ASSUME THE ENTIRE
|
||||||
|
// RISK OF USING THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// Terms of use
|
||||||
|
// ------------
|
||||||
|
// THIS SOFTWARE IS FREE FOR PERSONAL USE OR FREEWARE APPLICATIONS.
|
||||||
|
// IF YOU USE THIS SOFTWARE IN COMMERCIAL OR SHAREWARE APPLICATIONS YOU
|
||||||
|
// ARE GENTLY ASKED TO DONATE 1$ (ONE U.S. DOLLAR) TO THE AUTHOR:
|
||||||
|
|
||||||
|
#ifndef _BTNST_H
|
||||||
|
#define _BTNST_H
|
||||||
|
|
||||||
|
// Uncomment the following 2 lines to enable support for BCMenu class
|
||||||
|
#define BTNST_USE_BCMENU
|
||||||
|
#include "BCMenu.h"
|
||||||
|
|
||||||
|
#if _MSC_VER >= 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER >= 1000
|
||||||
|
|
||||||
|
// Return values
|
||||||
|
#ifndef BTNST_OK
|
||||||
|
#define BTNST_OK 0
|
||||||
|
#endif
|
||||||
|
#ifndef BTNST_INVALIDRESOURCE
|
||||||
|
#define BTNST_INVALIDRESOURCE 1
|
||||||
|
#endif
|
||||||
|
#ifndef BTNST_FAILEDMASK
|
||||||
|
#define BTNST_FAILEDMASK 2
|
||||||
|
#endif
|
||||||
|
#ifndef BTNST_INVALIDINDEX
|
||||||
|
#define BTNST_INVALIDINDEX 3
|
||||||
|
#endif
|
||||||
|
#ifndef BTNST_INVALIDALIGN
|
||||||
|
#define BTNST_INVALIDALIGN 4
|
||||||
|
#endif
|
||||||
|
#ifndef BTNST_BADPARAM
|
||||||
|
#define BTNST_BADPARAM 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Dummy identifier for grayscale icon
|
||||||
|
#ifndef BTNST_AUTO_GRAY
|
||||||
|
#define BTNST_AUTO_GRAY (HICON)(0xffffffff - 1L)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class CButtonST : public CButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CButtonST();
|
||||||
|
~CButtonST();
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ST_ALIGN_HORIZ = 0, // Icon/bitmap on the left, text on the right
|
||||||
|
ST_ALIGN_VERT, // Icon/bitmap on the top, text on the bottom
|
||||||
|
ST_ALIGN_HORIZ_RIGHT // Icon/bitmap on the right, text on the left
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
BTNST_COLOR_BK_IN = 0, // Background color when mouse is INside
|
||||||
|
BTNST_COLOR_FG_IN, // Text color when mouse is INside
|
||||||
|
BTNST_COLOR_BK_OUT, // Background color when mouse is OUTside
|
||||||
|
BTNST_COLOR_FG_OUT, // Text color when mouse is OUTside
|
||||||
|
BTNST_COLOR_BK_FOCUS, // Background color when the button is focused
|
||||||
|
BTNST_COLOR_FG_FOCUS, // Text color when the button is focused
|
||||||
|
|
||||||
|
BTNST_MAX_COLORS
|
||||||
|
};
|
||||||
|
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CButtonST)
|
||||||
|
public:
|
||||||
|
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
|
||||||
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||||
|
protected:
|
||||||
|
virtual void PreSubclassWindow();
|
||||||
|
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
public:
|
||||||
|
DWORD SetDefaultColors(BOOL bRepaint = TRUE);
|
||||||
|
DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE);
|
||||||
|
DWORD GetColor(BYTE byColorIndex, COLORREF* crpColor);
|
||||||
|
DWORD OffsetColor(BYTE byColorIndex, short shOffset, BOOL bRepaint = TRUE);
|
||||||
|
|
||||||
|
DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE);
|
||||||
|
int GetCheck();
|
||||||
|
|
||||||
|
DWORD SetURL(LPCTSTR lpszURL = NULL);
|
||||||
|
void DrawTransparent(BOOL bRepaint = FALSE);
|
||||||
|
|
||||||
|
BOOL GetDefault();
|
||||||
|
DWORD SetAlwaysTrack(BOOL bAlwaysTrack = TRUE);
|
||||||
|
|
||||||
|
// 文字 提示
|
||||||
|
void SetTooltipText(int nText, BOOL bActivate = TRUE);
|
||||||
|
void SetTooltipText(LPCTSTR lpszText, BOOL bActivate = TRUE);
|
||||||
|
void ActivateTooltip(BOOL bEnable = TRUE);
|
||||||
|
|
||||||
|
DWORD SetBtnCursor(int nCursorId = NULL, BOOL bRepaint = TRUE);
|
||||||
|
|
||||||
|
// 设置为平面
|
||||||
|
DWORD SetFlat(BOOL bFlat = TRUE, BOOL bRepaint = TRUE);
|
||||||
|
|
||||||
|
// 设置图标文字位置
|
||||||
|
DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE);
|
||||||
|
|
||||||
|
DWORD DrawBorder(BOOL bDrawBorder = TRUE, BOOL bRepaint = TRUE);
|
||||||
|
DWORD DrawFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = TRUE);
|
||||||
|
|
||||||
|
DWORD SetIcon(int nIconIn, int nIconOut = NULL);
|
||||||
|
DWORD SetIcon(HICON hIconIn, HICON hIconOut = NULL);
|
||||||
|
|
||||||
|
DWORD SetBitmaps(int nBitmapIn, COLORREF crTransColorIn, int nBitmapOut = NULL, COLORREF crTransColorOut = 0);
|
||||||
|
DWORD SetBitmaps(HBITMAP hBitmapIn, COLORREF crTransColorIn, HBITMAP hBitmapOut = NULL, COLORREF crTransColorOut = 0);
|
||||||
|
|
||||||
|
#ifdef BTNST_USE_BCMENU
|
||||||
|
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bWinXPStyle = TRUE, UINT nToolbarID = NULL, CSize sizeToolbarIcon = CSize(16, 16), COLORREF crToolbarBk = RGB(255, 0, 255), BOOL bRepaint = TRUE);
|
||||||
|
#else
|
||||||
|
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint = TRUE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static short GetVersionI() {return 35;}
|
||||||
|
static LPCTSTR GetVersionC() {return (LPCTSTR)_T("3.5");}
|
||||||
|
|
||||||
|
BOOL m_bShowDisabledBitmap;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//{{AFX_MSG(CButtonST)
|
||||||
|
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
||||||
|
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
||||||
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||||||
|
afx_msg void OnSysColorChange();
|
||||||
|
afx_msg BOOL OnClicked();
|
||||||
|
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
|
||||||
|
afx_msg void OnEnable(BOOL bEnable);
|
||||||
|
afx_msg void OnCancelMode();
|
||||||
|
afx_msg UINT OnGetDlgCode();
|
||||||
|
//}}AFX_MSG
|
||||||
|
|
||||||
|
#ifdef BTNST_USE_BCMENU
|
||||||
|
afx_msg LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu);
|
||||||
|
afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
|
||||||
|
HICON CreateGrayscaleIcon(HICON hIcon);
|
||||||
|
virtual DWORD OnDrawBackground(CDC* pDC, LPCRECT pRect);
|
||||||
|
virtual DWORD OnDrawBorder(CDC* pDC, LPCRECT pRect);
|
||||||
|
|
||||||
|
BOOL m_bIsFlat; // Is a flat button?
|
||||||
|
BOOL m_bMouseOnButton; // Is mouse over the button?
|
||||||
|
BOOL m_bDrawTransparent; // Draw transparent?
|
||||||
|
BOOL m_bIsPressed; // Is button pressed?
|
||||||
|
BOOL m_bIsFocused; // Is button focused?
|
||||||
|
BOOL m_bIsDisabled; // Is button disabled?
|
||||||
|
BOOL m_bIsDefault; // Is default button?
|
||||||
|
BOOL m_bIsCheckBox; // Is the button a checkbox?
|
||||||
|
BYTE m_byAlign; // Align mode
|
||||||
|
BOOL m_bDrawBorder; // Draw border?
|
||||||
|
BOOL m_bDrawFlatFocus; // Draw focus rectangle for flat button?
|
||||||
|
COLORREF m_crColors[BTNST_MAX_COLORS]; // Colors to be used
|
||||||
|
HWND m_hParentWndMenu; // Handle to window for menu selection
|
||||||
|
BOOL m_bMenuDisplayed; // Is menu displayed ?
|
||||||
|
|
||||||
|
#ifdef BTNST_USE_BCMENU
|
||||||
|
BCMenu m_menuPopup; // BCMenu class instance
|
||||||
|
#else
|
||||||
|
HMENU m_hMenu; // Handle to associated menu
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
LRESULT OnSetCheck(WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT OnGetCheck(WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT OnSetStyle(WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
void CancelHover();
|
||||||
|
void FreeResources(BOOL bCheckForNULL = TRUE);
|
||||||
|
void PrepareImageRect(BOOL bHasTitle, RECT* rpItem, CRect* rpTitle, BOOL bIsPressed, DWORD dwWidth, DWORD dwHeight, CRect* rpImage);
|
||||||
|
HBITMAP CreateBitmapMask(HBITMAP hSourceBitmap, DWORD dwWidth, DWORD dwHeight, COLORREF crTransColor);
|
||||||
|
void DrawTheIcon(CDC* pDC, BOOL bHasTitle, RECT* rpItem, CRect* rpTitle, BOOL bIsPressed, BOOL bIsDisabled);
|
||||||
|
void DrawTheBitmap(CDC* pDC, BOOL bHasTitle, RECT *rItem, CRect *rCaption, BOOL bIsPressed, BOOL bIsDisabled);
|
||||||
|
void PaintBk(CDC* pDC);
|
||||||
|
|
||||||
|
void InitToolTip();
|
||||||
|
|
||||||
|
HCURSOR m_hCursor; // Handle to cursor
|
||||||
|
CToolTipCtrl m_ToolTip; // Tooltip
|
||||||
|
|
||||||
|
CDC m_dcBk;
|
||||||
|
CBitmap m_bmpBk;
|
||||||
|
CBitmap* m_pbmpOldBk;
|
||||||
|
|
||||||
|
BOOL m_bAlwaysTrack; // Always hilight button?
|
||||||
|
int m_nCheck; // Current value for checkbox
|
||||||
|
UINT m_nTypeStyle; // Button style
|
||||||
|
|
||||||
|
TCHAR m_szURL[_MAX_PATH]; // URL to open when clicked
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct _STRUCT_ICONS
|
||||||
|
{
|
||||||
|
HICON hIcon; // Handle to icon
|
||||||
|
DWORD dwWidth; // Width of icon
|
||||||
|
DWORD dwHeight; // Height of icon
|
||||||
|
} STRUCT_ICONS;
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct _STRUCT_BITMAPS
|
||||||
|
{
|
||||||
|
HBITMAP hBitmap; // Handle to bitmap
|
||||||
|
DWORD dwWidth; // Width of bitmap
|
||||||
|
DWORD dwHeight; // Height of bitmap
|
||||||
|
HBITMAP hMask; // Handle to mask bitmap
|
||||||
|
COLORREF crTransparent; // Transparent color
|
||||||
|
} STRUCT_BITMAPS;
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
STRUCT_ICONS m_csIcons[2];
|
||||||
|
STRUCT_BITMAPS m_csBitmaps[2];
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,423 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Author : Aravindan Premkumar
|
||||||
|
Unregistered Copyright 2003 : Aravindan Premkumar
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
This piece of code does not have any registered copyright and is free to be
|
||||||
|
used as necessary. The user is free to modify as per the requirements. As a
|
||||||
|
fellow developer, all that I expect and request for is to be given the
|
||||||
|
credit for intially developing this reusable code by not removing my name as
|
||||||
|
the author.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "ComboListCtrl.h"
|
||||||
|
#include "InPlaceCombo.h"
|
||||||
|
#include "InPlaceEdit.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//#defines
|
||||||
|
#define FIRST_COLUMN 0
|
||||||
|
#define MIN_COLUMN_WIDTH 10
|
||||||
|
#define MAX_DROP_DOWN_ITEM_COUNT 10
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CComboListCtrl
|
||||||
|
|
||||||
|
CComboListCtrl::CComboListCtrl()
|
||||||
|
{
|
||||||
|
m_ComboSupportColumnsList.RemoveAll();
|
||||||
|
m_ReadOnlyColumnsList.RemoveAll();
|
||||||
|
m_strValidEditCtrlChars.Empty();
|
||||||
|
m_dwEditCtrlStyle = ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_NOHIDESEL;
|
||||||
|
m_dwDropDownCtrlStyle = WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL |
|
||||||
|
CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CComboListCtrl::~CComboListCtrl()
|
||||||
|
{
|
||||||
|
CInPlaceCombo::DeleteInstance();
|
||||||
|
CInPlaceEdit::DeleteInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CComboListCtrl, CListCtrl)
|
||||||
|
//{{AFX_MSG_MAP(CComboListCtrl)
|
||||||
|
ON_WM_HSCROLL()
|
||||||
|
ON_WM_VSCROLL()
|
||||||
|
ON_WM_LBUTTONDOWN()
|
||||||
|
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndLabelEdit)
|
||||||
|
ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, OnBeginLabelEdit)
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CComboListCtrl message handlers
|
||||||
|
|
||||||
|
CInPlaceCombo* CComboListCtrl::ShowInPlaceList(int iRowIndex, int iColumnIndex, CStringList& rComboItemsList,
|
||||||
|
CString strCurSelecetion /*= ""*/, int iSel /*= -1*/)
|
||||||
|
{
|
||||||
|
// The returned obPointer should not be saved
|
||||||
|
|
||||||
|
// Make sure that the item is visible
|
||||||
|
if (!EnsureVisible(iRowIndex, TRUE))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure that iColumnIndex is valid
|
||||||
|
CHeaderCtrl* pHeader = static_cast<CHeaderCtrl*> (GetDlgItem(FIRST_COLUMN));
|
||||||
|
|
||||||
|
int iColumnCount = pHeader->GetItemCount();
|
||||||
|
|
||||||
|
if (iColumnIndex >= iColumnCount || GetColumnWidth(iColumnIndex) < MIN_COLUMN_WIDTH)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the rectangle specifications for the combo box
|
||||||
|
CRect obCellRect(0, 0, 0, 0);
|
||||||
|
CalculateCellRect(iColumnIndex, iRowIndex, obCellRect);
|
||||||
|
|
||||||
|
int iHeight = obCellRect.Height();
|
||||||
|
int iCount = rComboItemsList.GetCount();
|
||||||
|
|
||||||
|
iCount = (iCount < MAX_DROP_DOWN_ITEM_COUNT) ?
|
||||||
|
iCount + MAX_DROP_DOWN_ITEM_COUNT : (MAX_DROP_DOWN_ITEM_COUNT + 1);
|
||||||
|
|
||||||
|
obCellRect.bottom += iHeight * iCount;
|
||||||
|
|
||||||
|
// Create the in place combobox
|
||||||
|
CInPlaceCombo* pInPlaceCombo = CInPlaceCombo::GetInstance();
|
||||||
|
pInPlaceCombo->ShowComboCtrl(m_dwDropDownCtrlStyle, obCellRect, this, 0, iRowIndex, iColumnIndex, &rComboItemsList,
|
||||||
|
strCurSelecetion, iSel);
|
||||||
|
|
||||||
|
return pInPlaceCombo;
|
||||||
|
}
|
||||||
|
|
||||||
|
CInPlaceEdit* CComboListCtrl::ShowInPlaceEdit(int iRowIndex, int iColumnIndex, CString& rstrCurSelection)
|
||||||
|
{
|
||||||
|
// Create an in-place edit control
|
||||||
|
CInPlaceEdit* pInPlaceEdit = CInPlaceEdit::GetInstance();
|
||||||
|
|
||||||
|
CRect obCellRect(0, 0, 0, 0);
|
||||||
|
CalculateCellRect(iColumnIndex, iRowIndex, obCellRect);
|
||||||
|
|
||||||
|
pInPlaceEdit->ShowEditCtrl(m_dwEditCtrlStyle, obCellRect, this, 0,
|
||||||
|
iRowIndex, iColumnIndex,
|
||||||
|
m_strValidEditCtrlChars, rstrCurSelection);
|
||||||
|
|
||||||
|
return pInPlaceEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::OnHScroll(UINT iSBCode, UINT iPos, CScrollBar* pScrollBar)
|
||||||
|
{
|
||||||
|
// TODO: Add your message handler code here and/or call default
|
||||||
|
|
||||||
|
if (GetFocus() != this)
|
||||||
|
{
|
||||||
|
SetFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
CListCtrl::OnHScroll(iSBCode, iPos, pScrollBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::OnVScroll(UINT iSBCode, UINT iPos, CScrollBar* pScrollBar)
|
||||||
|
{
|
||||||
|
// TODO: Add your message handler code here and/or call default
|
||||||
|
|
||||||
|
if (GetFocus() != this)
|
||||||
|
{
|
||||||
|
SetFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
CListCtrl::OnVScroll(iSBCode, iPos, pScrollBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::OnLButtonDown(UINT iFlags, CPoint obPoint)
|
||||||
|
{
|
||||||
|
// TODO: Add your message handler code here and/or call default
|
||||||
|
|
||||||
|
int iColumnIndex = -1;
|
||||||
|
int iRowIndex = -1;
|
||||||
|
|
||||||
|
// Get the current column and row
|
||||||
|
if (!HitTestEx(obPoint, &iRowIndex, &iColumnIndex))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CListCtrl::OnLButtonDown(iFlags, obPoint);
|
||||||
|
|
||||||
|
// If column is not read only then
|
||||||
|
// If the SHIFT or CTRL key is down call the base class
|
||||||
|
// Check the high bit of GetKeyState to determine whether SHIFT or CTRL key is down
|
||||||
|
if ((GetKeyState(VK_SHIFT) & 0x80) || (GetKeyState(VK_CONTROL) & 0x80))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the current selection before creating the in place combo box
|
||||||
|
CString strCurSelection = GetItemText(iRowIndex, iColumnIndex);
|
||||||
|
|
||||||
|
if (-1 != iRowIndex)
|
||||||
|
{
|
||||||
|
UINT flag = LVIS_FOCUSED;
|
||||||
|
|
||||||
|
if ((GetItemState(iRowIndex, flag ) & flag) == flag)
|
||||||
|
{
|
||||||
|
// Add check for LVS_EDITLABELS
|
||||||
|
if (GetWindowLong(m_hWnd, GWL_STYLE) & LVS_EDITLABELS)
|
||||||
|
{
|
||||||
|
// If combo box is supported
|
||||||
|
// Create and show the in place combo box
|
||||||
|
if (IsCombo(iColumnIndex))
|
||||||
|
{
|
||||||
|
CStringList obComboItemsList;
|
||||||
|
|
||||||
|
GetParent()->SendMessage(WM_SET_ITEMS, (WPARAM)iColumnIndex, (LPARAM)&obComboItemsList);
|
||||||
|
|
||||||
|
CInPlaceCombo* pInPlaceComboBox = ShowInPlaceList(iRowIndex, iColumnIndex, obComboItemsList, strCurSelection);
|
||||||
|
ASSERT(pInPlaceComboBox);
|
||||||
|
|
||||||
|
// Set the selection to previous selection
|
||||||
|
pInPlaceComboBox->SelectString(-1, strCurSelection);
|
||||||
|
}
|
||||||
|
// If combo box is not read only
|
||||||
|
// Create and show the in place edit control
|
||||||
|
else if (!IsReadOnly(iColumnIndex))
|
||||||
|
{
|
||||||
|
CInPlaceEdit* pInPlaceEdit = ShowInPlaceEdit(iRowIndex, iColumnIndex, strCurSelection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComboListCtrl::HitTestEx(CPoint &obPoint, int* pRowIndex, int* pColumnIndex) const
|
||||||
|
{
|
||||||
|
if (!pRowIndex || !pColumnIndex)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the row index
|
||||||
|
*pRowIndex = HitTest(obPoint, NULL);
|
||||||
|
|
||||||
|
if (pColumnIndex)
|
||||||
|
{
|
||||||
|
*pColumnIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure that the ListView is in LVS_REPORT
|
||||||
|
if ((GetWindowLong(m_hWnd, GWL_STYLE) & LVS_TYPEMASK) != LVS_REPORT)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the number of columns
|
||||||
|
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
|
||||||
|
|
||||||
|
int iColumnCount = pHeader->GetItemCount();
|
||||||
|
|
||||||
|
// Get bounding rect of item and check whether obPoint falls in it.
|
||||||
|
CRect obCellRect;
|
||||||
|
GetItemRect(*pRowIndex, &obCellRect, LVIR_BOUNDS);
|
||||||
|
|
||||||
|
if (obCellRect.PtInRect(obPoint))
|
||||||
|
{
|
||||||
|
// Now find the column
|
||||||
|
for (*pColumnIndex = 0; *pColumnIndex < iColumnCount; (*pColumnIndex)++)
|
||||||
|
{
|
||||||
|
int iColWidth = GetColumnWidth(*pColumnIndex);
|
||||||
|
|
||||||
|
if (obPoint.x >= obCellRect.left && obPoint.x <= (obCellRect.left + iColWidth))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
obCellRect.left += iColWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::SetComboColumns(int iColumnIndex, bool bSet /*= true*/)
|
||||||
|
{
|
||||||
|
// If the Column Index is not present && Set flag is false
|
||||||
|
// Then do nothing
|
||||||
|
// If the Column Index is present && Set flag is true
|
||||||
|
// Then do nothing
|
||||||
|
POSITION Pos = m_ComboSupportColumnsList.Find(iColumnIndex);
|
||||||
|
|
||||||
|
// If the Column Index is not present && Set flag is true
|
||||||
|
// Then Add to list
|
||||||
|
if ((NULL == Pos) && bSet)
|
||||||
|
{
|
||||||
|
m_ComboSupportColumnsList.AddTail(iColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the Column Index is present && Set flag is false
|
||||||
|
// Then Remove from list
|
||||||
|
if ((NULL != Pos) && !bSet)
|
||||||
|
{
|
||||||
|
m_ComboSupportColumnsList.RemoveAt(Pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::SetReadOnlyColumns(int iColumnIndex, bool bSet /*= true*/)
|
||||||
|
{
|
||||||
|
// If the Column Index is not present && Set flag is false
|
||||||
|
// Then do nothing
|
||||||
|
// If the Column Index is present && Set flag is true
|
||||||
|
// Then do nothing
|
||||||
|
POSITION Pos = m_ReadOnlyColumnsList.Find(iColumnIndex);
|
||||||
|
|
||||||
|
// If the Column Index is not present && Set flag is true
|
||||||
|
// Then Add to list
|
||||||
|
if ((NULL == Pos) && bSet)
|
||||||
|
{
|
||||||
|
m_ReadOnlyColumnsList.AddTail(iColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the Column Index is present && Set flag is false
|
||||||
|
// Then Remove from list
|
||||||
|
if ((NULL != Pos) && !bSet)
|
||||||
|
{
|
||||||
|
m_ReadOnlyColumnsList.RemoveAt(Pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComboListCtrl::IsReadOnly(int iColumnIndex)
|
||||||
|
{
|
||||||
|
if (m_ReadOnlyColumnsList.Find(iColumnIndex))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComboListCtrl::IsCombo(int iColumnIndex)
|
||||||
|
{
|
||||||
|
if (m_ComboSupportColumnsList.Find(iColumnIndex))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::CalculateCellRect(int iColumnIndex, int iRowIndex, CRect& robCellRect)
|
||||||
|
{
|
||||||
|
GetItemRect(iRowIndex, &robCellRect, LVIR_BOUNDS);
|
||||||
|
|
||||||
|
CRect rcClient;
|
||||||
|
GetClientRect(&rcClient);
|
||||||
|
|
||||||
|
if (robCellRect.right > rcClient.right)
|
||||||
|
{
|
||||||
|
robCellRect.right = rcClient.right;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollToView(iColumnIndex, robCellRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
|
||||||
|
// Update the item text with the new text
|
||||||
|
SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);
|
||||||
|
|
||||||
|
GetParent()->SendMessage(WM_VALIDATE, GetDlgCtrlID(), (LPARAM)pDispInfo);
|
||||||
|
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::SetValidEditCtrlCharacters(CString &rstrValidCharacters)
|
||||||
|
{
|
||||||
|
m_strValidEditCtrlChars = rstrValidCharacters;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::EnableHScroll(bool bEnable /*= true*/)
|
||||||
|
{
|
||||||
|
if (bEnable)
|
||||||
|
{
|
||||||
|
m_dwDropDownCtrlStyle |= WS_HSCROLL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dwDropDownCtrlStyle &= ~WS_HSCROLL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::EnableVScroll(bool bEnable /*= true*/)
|
||||||
|
{
|
||||||
|
if (bEnable)
|
||||||
|
{
|
||||||
|
m_dwDropDownCtrlStyle |= WS_VSCROLL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dwDropDownCtrlStyle &= ~WS_VSCROLL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::ScrollToView(int iColumnIndex, /*int iOffSet, */CRect& robCellRect)
|
||||||
|
{
|
||||||
|
// Now scroll if we need to expose the column
|
||||||
|
CRect rcClient;
|
||||||
|
GetClientRect(&rcClient);
|
||||||
|
|
||||||
|
int iColumnWidth = GetColumnWidth(iColumnIndex);
|
||||||
|
|
||||||
|
// Get the column iOffset
|
||||||
|
int iOffSet = 0;
|
||||||
|
for (int iIndex_ = 0; iIndex_ < iColumnIndex; iIndex_++)
|
||||||
|
{
|
||||||
|
iOffSet += GetColumnWidth(iIndex_);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If x1 of cell rect is < x1 of ctrl rect or
|
||||||
|
// If x1 of cell rect is > x1 of ctrl rect or **Should not ideally happen**
|
||||||
|
// If the width of the cell extends beyond x2 of ctrl rect then
|
||||||
|
// Scroll
|
||||||
|
|
||||||
|
CSize obScrollSize(0, 0);
|
||||||
|
|
||||||
|
if (((iOffSet + robCellRect.left) < rcClient.left) ||
|
||||||
|
((iOffSet + robCellRect.left) > rcClient.right))
|
||||||
|
{
|
||||||
|
obScrollSize.cx = iOffSet + robCellRect.left;
|
||||||
|
}
|
||||||
|
else if ((iOffSet + robCellRect.left + iColumnWidth) > rcClient.right)
|
||||||
|
{
|
||||||
|
obScrollSize.cx = iOffSet + robCellRect.left + iColumnWidth - rcClient.right;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scroll(obScrollSize);
|
||||||
|
robCellRect.left -= obScrollSize.cx;
|
||||||
|
|
||||||
|
// Set the width to the column width
|
||||||
|
robCellRect.left += iOffSet;
|
||||||
|
robCellRect.right = robCellRect.left + iColumnWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComboListCtrl::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
if (IsReadOnly(pDispInfo->item.iSubItem))
|
||||||
|
{
|
||||||
|
*pResult = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
@ -0,0 +1,130 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Author : Aravindan Premkumar
|
||||||
|
Unregistered Copyright 2003 : Aravindan Premkumar
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
This piece of code does not have any registered copyright and is free to be
|
||||||
|
used as necessary. The user is free to modify as per the requirements. As a
|
||||||
|
fellow developer, all that I expect and request for is to be given the
|
||||||
|
credit for intially developing this reusable code by not removing my name as
|
||||||
|
the author.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#if !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)
|
||||||
|
#define AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
#include <afxtempl.h>
|
||||||
|
|
||||||
|
class CInPlaceCombo;
|
||||||
|
class CInPlaceEdit;
|
||||||
|
|
||||||
|
// User define message
|
||||||
|
// This message is posted to the parent
|
||||||
|
// The message can be handled to make the necessary validations, if any
|
||||||
|
#define WM_VALIDATE WM_USER + 0x7FFD
|
||||||
|
|
||||||
|
// User define message
|
||||||
|
// This message is posted to the parent
|
||||||
|
// The message should be handled to spcify the items to the added to the combo
|
||||||
|
#define WM_SET_ITEMS WM_USER + 0x7FFC
|
||||||
|
|
||||||
|
class CComboListCtrl : public CListCtrl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
CComboListCtrl();
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
virtual ~CComboListCtrl();
|
||||||
|
|
||||||
|
// Sets/Resets the column which support the in place combo box
|
||||||
|
void SetComboColumns(int iColumnIndex, bool bSet = true);
|
||||||
|
|
||||||
|
// Sets/Resets the column which support the in place edit control
|
||||||
|
void SetReadOnlyColumns(int iColumnIndex, bool bSet = true);
|
||||||
|
|
||||||
|
// Sets the valid characters for the edit ctrl
|
||||||
|
void SetValidEditCtrlCharacters(CString& rstrValidCharacters);
|
||||||
|
|
||||||
|
// Sets the vertical scroll
|
||||||
|
void EnableVScroll(bool bEnable = true);
|
||||||
|
|
||||||
|
// Sets the horizontal scroll
|
||||||
|
void EnableHScroll(bool bEnable = true);
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CComboListCtrl)
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Methods
|
||||||
|
// Generated message map functions
|
||||||
|
//{{AFX_MSG(CComboListCtrl)
|
||||||
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||||
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||||
|
afx_msg void OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
afx_msg void OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
//}}AFX_MSG
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
|
||||||
|
// Returns the row & column index of the column on which mouse click event has occured
|
||||||
|
bool HitTestEx(CPoint& rHitPoint, int* pRowIndex, int* pColumnIndex) const;
|
||||||
|
|
||||||
|
// Creates and displays the in place combo box
|
||||||
|
CInPlaceCombo* ShowInPlaceList(int iRowIndex, int iColumnIndex, CStringList& rComboItemsList,
|
||||||
|
CString strCurSelecetion = "", int iSel = -1);
|
||||||
|
|
||||||
|
// Creates and displays the in place edit control
|
||||||
|
CInPlaceEdit* ShowInPlaceEdit(int iRowIndex, int iColumnIndex, CString& rstrCurSelection);
|
||||||
|
|
||||||
|
// Calculates the cell rect
|
||||||
|
void CalculateCellRect(int iColumnIndex, int iRowIndex, CRect& robCellRect);
|
||||||
|
|
||||||
|
// Checks whether column supports in place combo box
|
||||||
|
bool IsCombo(int iColumnIndex);
|
||||||
|
|
||||||
|
// Checks whether column is read only
|
||||||
|
bool IsReadOnly(int iColumnIndex);
|
||||||
|
|
||||||
|
// Scrolls the list ctrl to bring the in place ctrl to the view
|
||||||
|
void ScrollToView(int iColumnIndex, /*int iOffSet, */CRect& obCellRect);
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
|
||||||
|
// List of columns that support the in place combo box
|
||||||
|
CList<int, int> m_ComboSupportColumnsList;
|
||||||
|
|
||||||
|
// List of columns that are read only
|
||||||
|
CList<int, int> m_ReadOnlyColumnsList;
|
||||||
|
|
||||||
|
// Valid characters
|
||||||
|
CString m_strValidEditCtrlChars;
|
||||||
|
|
||||||
|
// The window style of the in place edit ctrl
|
||||||
|
DWORD m_dwEditCtrlStyle;
|
||||||
|
|
||||||
|
// The window style of the in place combo ctrl
|
||||||
|
DWORD m_dwDropDownCtrlStyle;
|
||||||
|
};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,138 @@
|
|||||||
|
..\Debug\GISControlDlg.ilk
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\BIN\GISCONTROLDLG.BSC
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\bin\GISControlDlg.exp
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\bin\GISControlDlg.lib
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\BIN\GISCONTROLDLG.PDB
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\DEBUG\GISCONTROLDLG.DLL
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\DEBUG\GISCONTROLDLG.ILK
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\..\Debug\GISControlDlg.dll
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\ANGLE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\ANGLE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\BCMENU.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\BCMENU.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\BscMake.command.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\bscmake.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\bscmake.write.1.tlog
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\BTNST.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\BTNST.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CALLBACK.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CALLBACK.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHART.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHART.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHARTFIELD.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHARTFIELD.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHARTS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\CHARTS.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\cl.command.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\CL.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\CL.write.1.tlog
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGDEMALT.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGDEMALT.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGLIGHTREGION.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGLIGHTREGION.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGMARKER.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\DLGMARKER.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\EXPORTQBGISCTRLCLASS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\EXPORTQBGISCTRLCLASS.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\EXTENTS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\EXTENTS.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\FIELD.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\FIELD.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\FLYLINEDESIGN.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\FLYLINEDESIGN.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GEOPROJECTION.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GEOPROJECTION.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.DLL.EMBED.MANIFEST
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.DLL.EMBED.MANIFEST.RES
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.DLL.INTERMEDIATE.MANIFEST
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.PCH
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.RES
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISCONTROLDLG.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\GISControlDlg.write.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\GISControlDlg_manifest.rc
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISDLG.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISMANAGER.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GISMANAGER.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GLOBE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\GLOBE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\IMAGE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\IMAGE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABEL.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABEL.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABELCATEGORY.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABELCATEGORY.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABELS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LABELS.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEDESIGN.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEDESIGN.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEMANAGE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEMANAGE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEPATTERN.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINEPATTERN.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINESECTDISAZDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINESECTDISAZDLG.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINESEGMENT.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LINESEGMENT.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\link.command.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\link.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\link.write.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\link-cvtres.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\link-cvtres.write.1.tlog
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LONLATDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\LONLATDLG.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAP.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAP.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAPELEVATION.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAPELEVATION.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAPLAYERMANAGE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MAPLAYERMANAGE.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\mapwingis.tlh
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\mapwingis.tli
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MODIFYLINEPOINTDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\MODIFYLINEPOINTDLG.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\mt.command.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\mt.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\mt.write.1.tlog
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\PICTURE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\PICTURE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\POINT.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\POINT.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\rc.command.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\rc.read.1.tlog
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\rc.write.1.tlog
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SAVELINEEDITSETTING.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SAVELINEEDITSETTING.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SCREENCAPTURE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SCREENCAPTURE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SETSAVELINEID.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SETSAVELINEID.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEDRAWINGOPTIONS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEDRAWINGOPTIONS.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILECATEGORIES.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILECATEGORIES.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILECATEGORY.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHAPEFILECATEGORY.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHOWHZDISTANCEDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\SHOWHZDISTANCEDLG.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\STDAFX.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\STDAFX.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TABLE.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TABLE.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TARGETDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TARGETDLG.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TOOLBAREX.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TOOLBAREX.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TOPOLOGICALANALYSIS.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\TOPOLOGICALANALYSIS.SBR
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\UAVSELECTDLG.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\UAVSELECTDLG.SBR
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\GISControlDlg\Debug\vc100.idb
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\VC100.PDB
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\VECTORTORASTER.OBJ
|
||||||
|
D:\GCS SOFTWARE\GCS-JE20230622-981A\GISCONTROLDLG\DEBUG\VECTORTORASTER.SBR
|
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel></requestedPrivileges></security></trustInfo><application xmlns="urn:schemas-microsoft-com:asm.v3"><windowsSettings><ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings" xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</ms_windowsSettings:dpiAware></windowsSettings></application></assembly>
|
Binary file not shown.
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
|
||||||
|
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
|
||||||
|
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<security>
|
||||||
|
<requestedPrivileges>
|
||||||
|
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
|
||||||
|
</requestedPrivileges>
|
||||||
|
</security>
|
||||||
|
</trustInfo>
|
||||||
|
</assembly>
|
@ -0,0 +1,2 @@
|
|||||||
|
#v4.0:v100
|
||||||
|
Debug|Win32|D:\GCS software\GCS-JE20230622-981A\GCS-JE\|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,3 @@
|
|||||||
|
^D:\GCS software\GCS-JE20230622-981A\GISControlDlg\GISControlDlg.vcxproj
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\bin\GISControlDlg.lib
|
||||||
|
D:\GCS software\GCS-JE20230622-981A\bin\GISControlDlg.exp
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue