Hex Artifact Content Вы: nobody
Вход

Artifact 6af3a8ea7f8b251f5f681031a8c8817b8725447f:


0000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0040: 2f 2f 2f 2f 2f 0d 0a 2f 2f 20 44 61 74 61 50 72  /////..// DataPr
0050: 6f 76 69 64 65 72 2e 68 20 3a 20 69 6e 74 65 72  ovider.h : inter
0060: 66 61 63 65 20 66 6f 72 20 64 61 74 61 20 70 72  face for data pr
0070: 6f 76 69 64 65 72 73 20 75 73 65 64 20 66 6f 72  oviders used for
0080: 20 43 75 72 73 6f 72 47 72 69 64 43 74 72 6c 0d   CursorGridCtrl.
0090: 0a 2f 2f 0d 0a 2f 2f 20 57 72 69 74 74 65 6e 20  .//..// Written 
00a0: 62 79 20 44 6d 69 74 72 69 79 20 4f 73 68 63 68  by Dmitriy Oshch
00b0: 65 70 6b 6f 76 20 61 6b 61 20 44 6d 69 74 72 4f  epkov aka DmitrO
00c0: 2c 20 6d 61 69 6c 74 6f 3a 20 64 6d 69 74 72 6f  , mailto: dmitro
00d0: 40 72 75 73 73 69 61 6e 2e 72 75 0d 0a 2f 2f 20  @russian.ru..// 
00e0: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
00f0: 30 35 2d 32 30 30 38 2e 20 41 6c 6c 20 52 69 67  05-2008. All Rig
0100: 68 74 73 20 52 65 73 65 72 76 65 64 2e 0d 0a 2f  hts Reserved.../
0110: 2f 20 56 65 72 73 69 6f 6e 3a 20 31 2e 30 0d 0a  / Version: 1.0..
0120: 2f 2f 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //..////////////
0130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 70  //////////....#p
0170: 72 61 67 6d 61 20 6f 6e 63 65 0d 0a 0d 0a 65 6e  ragma once....en
0180: 75 6d 20 52 65 67 69 6f 6e 54 79 70 65 20 7b 72  um RegionType {r
0190: 74 4e 6f 6e 65 2c 20 72 74 48 65 61 64 65 72 2c  tNone, rtHeader,
01a0: 20 72 74 48 65 61 64 2c 20 72 74 42 6f 64 79 2c   rtHead, rtBody,
01b0: 20 72 74 54 61 69 6c 7d 3b 0d 0a 65 6e 75 6d 20   rtTail};..enum 
01c0: 44 61 74 61 54 79 70 65 0d 0a 7b 0d 0a 20 20 20  DataType..{..   
01d0: 20 64 74 55 6e 64 65 66 69 6e 65 64 2c 0d 0a 20   dtUndefined,.. 
01e0: 20 20 20 64 74 54 65 78 74 2c 0d 0a 20 20 20 20     dtText,..    
01f0: 64 74 4e 75 6d 65 72 69 63 2c 0d 0a 20 20 20 20  dtNumeric,..    
0200: 64 74 44 61 74 65 2c 0d 0a 20 20 20 20 64 74 46  dtDate,..    dtF
0210: 61 6c 73 65 2c 0d 0a 20 20 20 20 64 74 54 72 75  alse,..    dtTru
0220: 65 0d 0a 7d 3b 0d 0a 0d 0a 63 6c 61 73 73 20 43  e..};....class C
0230: 44 61 74 61 52 6f 77 0d 0a 7b 0d 0a 70 75 62 6c  DataRow..{..publ
0240: 69 63 3a 0d 0a 20 20 20 20 43 44 61 74 61 52 6f  ic:..    CDataRo
0250: 77 28 29 20 3a 20 6d 5f 6e 52 65 66 43 6f 75 6e  w() : m_nRefCoun
0260: 74 28 31 29 20 7b 7d 3b 0d 0a 20 20 20 20 76 69  t(1) {};..    vi
0270: 72 74 75 61 6c 20 7e 43 44 61 74 61 52 6f 77 28  rtual ~CDataRow(
0280: 29 0d 0a 09 7b 0d 0a 2f 2f 20 09 09 69 66 20 28  )...{..// ..if (
0290: 6d 5f 6e 52 65 66 43 6f 75 6e 74 29 0d 0a 2f 2f  m_nRefCount)..//
02a0: 20 09 09 09 4d 73 67 28 22 43 44 61 74 61 52 6f   ...Msg("CDataRo
02b0: 77 20 25 70 20 52 65 66 43 6f 75 6e 74 20 25 69  w %p RefCount %i
02c0: 20 76 69 6f 6c 61 74 69 6f 6e 21 22 2c 20 74 68   violation!", th
02d0: 69 73 2c 20 6d 5f 6e 52 65 66 43 6f 75 6e 74 29  is, m_nRefCount)
02e0: 3b 0d 0a 09 7d 3b 0d 0a 0d 0a 20 20 20 20 76 69  ;...};....    vi
02f0: 72 74 75 61 6c 20 69 6e 74 20 47 65 74 46 69 65  rtual int GetFie
0300: 6c 64 43 6f 75 6e 74 28 29 20 3d 20 30 3b 0d 0a  ldCount() = 0;..
0310: 20 20 20 20 76 69 72 74 75 61 6c 20 69 6e 74 20      virtual int 
0320: 47 65 74 46 69 65 6c 64 49 6e 64 65 78 4f 66 28  GetFieldIndexOf(
0330: 4c 50 43 53 54 52 20 73 7a 46 69 65 6c 64 4e 61  LPCSTR szFieldNa
0340: 6d 65 29 20 3d 20 30 3b 0d 0a 20 20 20 20 76 69  me) = 0;..    vi
0350: 72 74 75 61 6c 20 4c 50 43 53 54 52 20 47 65 74  rtual LPCSTR Get
0360: 46 69 65 6c 64 4e 61 6d 65 28 69 6e 74 20 6e 49  FieldName(int nI
0370: 6e 64 65 78 29 20 3d 20 30 3b 0d 0a 20 20 20 20  ndex) = 0;..    
0380: 76 69 72 74 75 61 6c 20 44 61 74 61 54 79 70 65  virtual DataType
0390: 20 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e   GetFieldType(in
03a0: 74 20 6e 49 6e 64 65 78 29 20 7b 72 65 74 75 72  t nIndex) {retur
03b0: 6e 20 64 74 55 6e 64 65 66 69 6e 65 64 3b 7d 3b  n dtUndefined;};
03c0: 0d 0a 20 20 20 20 76 69 72 74 75 61 6c 20 76 6f  ..    virtual vo
03d0: 69 64 20 46 6f 72 6d 61 74 46 69 65 6c 64 28 69  id FormatField(i
03e0: 6e 74 20 6e 49 6e 64 65 78 2c 20 43 53 74 72 69  nt nIndex, CStri
03f0: 6e 67 26 20 73 74 72 56 61 6c 75 65 29 20 3d 20  ng& strValue) = 
0400: 30 3b 0d 0a 20 20 20 20 76 69 72 74 75 61 6c 20  0;..    virtual 
0410: 55 49 4e 54 20 47 65 74 52 6f 77 49 6e 64 65 78  UINT GetRowIndex
0420: 28 29 20 7b 72 65 74 75 72 6e 20 30 3b 7d 3b 0d  () {return 0;};.
0430: 0a 0d 0a 09 76 6f 69 64 20 41 64 64 52 65 66 28  ....void AddRef(
0440: 29 20 7b 6d 5f 6e 52 65 66 43 6f 75 6e 74 2b 2b  ) {m_nRefCount++
0450: 3b 7d 3b 0d 0a 09 76 6f 69 64 20 52 65 6c 65 61  ;};...void Relea
0460: 73 65 28 29 20 7b 69 66 20 28 21 2d 2d 6d 5f 6e  se() {if (!--m_n
0470: 52 65 66 43 6f 75 6e 74 29 20 64 65 6c 65 74 65  RefCount) delete
0480: 20 74 68 69 73 3b 20 7d 3b 0d 0a 0d 0a 09 69 6e   this; };.....in
0490: 74 20 6d 5f 6e 52 65 66 43 6f 75 6e 74 3b 0d 0a  t m_nRefCount;..
04a0: 7d 3b 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 44 50  };....#define DP
04b0: 5f 44 41 54 41 5f 43 48 41 4e 47 45 20 20 28 57  _DATA_CHANGE  (W
04c0: 4d 5f 55 53 45 52 20 2b 20 30 78 30 30 31 30 29  M_USER + 0x0010)
04d0: 0d 0a 2f 2f 74 68 65 20 77 50 61 72 61 6d 20 66  ..//the wParam f
04e0: 6f 72 20 44 50 5f 44 41 54 41 5f 43 48 41 4e 47  or DP_DATA_CHANG
04f0: 45 3a 0d 0a 23 64 65 66 69 6e 65 20 44 50 5f 52  E:..#define DP_R
0500: 45 53 45 54 20 20 20 20 20 20 20 20 30 78 30 30  ESET        0x00
0510: 30 30 20 20 2f 2f 6c 50 61 72 61 6d 20 69 73 20  00  //lParam is 
0520: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 44 61  pointer to a CDa
0530: 74 61 52 6f 77 20 6f 72 20 6d 61 79 20 62 65 20  taRow or may be 
0540: 4e 55 4c 4c 0d 0a 23 64 65 66 69 6e 65 20 44 50  NULL..#define DP
0550: 5f 46 49 45 4c 44 53 20 20 20 20 20 20 20 30 78  _FIELDS       0x
0560: 30 30 30 31 0d 0a 23 64 65 66 69 6e 65 20 44 50  0001..#define DP
0570: 5f 43 55 52 52 4f 57 20 20 20 20 20 20 20 30 78  _CURROW       0x
0580: 30 30 30 32 20 20 2f 2f 6c 50 61 72 61 6d 20 69  0002  //lParam i
0590: 73 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  s pointer to a C
05a0: 44 61 74 61 52 6f 77 20 6d 75 73 74 20 62 65 20  DataRow must be 
05b0: 6e 6f 74 20 4e 55 4c 4c 0d 0a 0d 0a 73 74 72 75  not NULL....stru
05c0: 63 74 20 73 74 51 75 69 63 6b 53 65 61 72 63 68  ct stQuickSearch
05d0: 50 61 74 74 65 72 6e 0d 0a 7b 0d 0a 20 20 20 20  Pattern..{..    
05e0: 4c 50 43 53 54 52 20 73 7a 46 69 65 6c 64 4e 61  LPCSTR szFieldNa
05f0: 6d 65 3b 0d 0a 20 20 20 20 44 61 74 61 54 79 70  me;..    DataTyp
0600: 65 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20  e dataType;..   
0610: 20 75 6e 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20   union..    {.. 
0620: 20 20 20 20 20 20 20 43 53 74 72 69 6e 67 2a 20         CString* 
0630: 70 54 65 78 74 44 61 74 61 3b 20 2f 2f 66 6f 72  pTextData; //for
0640: 20 74 65 78 74 20 66 69 65 6c 64 73 3b 0d 0a 20   text fields;.. 
0650: 20 20 20 20 20 20 20 20 2f 2f 66 6f 72 20 6e 75          //for nu
0660: 6d 65 72 69 63 20 66 69 65 6c 64 73 3b 0d 0a 20  meric fields;.. 
0670: 20 20 20 20 20 20 20 20 2f 2f 66 6f 72 20 64 61          //for da
0680: 74 61 20 66 69 65 6c 64 73 3b 0d 0a 20 20 20 20  ta fields;..    
0690: 20 20 20 20 20 2f 2f 66 6f 72 20 73 6f 6d 65 20       //for some 
06a0: 6f 74 68 65 72 20 66 69 65 6c 64 73 3b 0d 0a 20  other fields;.. 
06b0: 20 20 20 7d 3b 0d 0a 7d 3b 0d 0a 0d 0a 63 6c 61     };..};....cla
06c0: 73 73 20 43 44 61 74 61 50 72 6f 76 69 64 65 72  ss CDataProvider
06d0: 0d 0a 7b 0d 0a 70 75 62 6c 69 63 3a 0d 0a 20 20  ..{..public:..  
06e0: 20 20 43 44 61 74 61 50 72 6f 76 69 64 65 72 28    CDataProvider(
06f0: 29 20 3a 20 6d 5f 68 43 74 72 6c 28 4e 55 4c 4c  ) : m_hCtrl(NULL
0700: 29 2c 20 6d 5f 52 65 67 69 6f 6e 54 79 70 65 28  ), m_RegionType(
0710: 72 74 4e 6f 6e 65 29 20 7b 7d 3b 0d 0a 20 20 20  rtNone) {};..   
0720: 20 76 69 72 74 75 61 6c 20 7e 43 44 61 74 61 50   virtual ~CDataP
0730: 72 6f 76 69 64 65 72 28 29 20 7b 7d 3b 0d 0a 0d  rovider() {};...
0740: 0a 70 75 62 6c 69 63 3a 0d 0a 20 20 20 20 48 57  .public:..    HW
0750: 4e 44 20 47 65 74 43 6f 6e 74 72 6f 6c 28 29 20  ND GetControl() 
0760: 63 6f 6e 73 74 0d 0a 20 20 20 20 7b 72 65 74 75  const..    {retu
0770: 72 6e 20 6d 5f 68 43 74 72 6c 3b 7d 3b 0d 0a 20  rn m_hCtrl;};.. 
0780: 20 20 20 76 6f 69 64 20 53 65 74 43 6f 6e 74 72     void SetContr
0790: 6f 6c 28 48 57 4e 44 20 68 43 6f 6e 74 72 6f 6c  ol(HWND hControl
07a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
07b0: 20 20 6d 5f 68 43 74 72 6c 20 3d 20 68 43 6f 6e    m_hCtrl = hCon
07c0: 74 72 6f 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69  trol;..        i
07d0: 66 20 28 6d 5f 68 43 74 72 6c 29 0d 0a 20 20 20  f (m_hCtrl)..   
07e0: 20 20 20 20 20 20 20 20 20 4f 6e 41 74 74 61 63           OnAttac
07f0: 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 65 6c  h();..        el
0800: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
0810: 4f 6e 44 65 74 61 63 68 28 29 3b 0d 0a 20 20 20  OnDetach();..   
0820: 20 7d 3b 0d 0a 0d 0a 09 52 65 67 69 6f 6e 54 79   };.....RegionTy
0830: 70 65 20 47 65 74 52 65 67 69 6f 6e 54 79 70 65  pe GetRegionType
0840: 28 29 20 7b 20 72 65 74 75 72 6e 20 6d 5f 52 65  () { return m_Re
0850: 67 69 6f 6e 54 79 70 65 3b 20 7d 3b 0d 0a 09 76  gionType; };...v
0860: 6f 69 64 20 53 65 74 52 65 67 69 6f 6e 54 79 70  oid SetRegionTyp
0870: 65 28 52 65 67 69 6f 6e 54 79 70 65 20 72 54 79  e(RegionType rTy
0880: 70 65 29 20 7b 20 6d 5f 52 65 67 69 6f 6e 54 79  pe) { m_RegionTy
0890: 70 65 20 3d 20 72 54 79 70 65 3b 20 7d 3b 0d 0a  pe = rType; };..
08a0: 0d 0a 20 20 20 20 76 6f 69 64 20 52 65 73 65 74  ..    void Reset
08b0: 44 61 74 61 28 43 44 61 74 61 52 6f 77 2a 20 70  Data(CDataRow* p
08c0: 44 61 74 61 52 6f 77 20 3d 20 4e 55 4c 4c 29 0d  DataRow = NULL).
08d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
08e0: 69 66 20 28 6d 5f 68 43 74 72 6c 29 0d 0a 09 09  if (m_hCtrl)....
08f0: 09 3a 3a 53 65 6e 64 4d 65 73 73 61 67 65 28 6d  .::SendMessage(m
0900: 5f 68 43 74 72 6c 2c 20 44 50 5f 44 41 54 41 5f  _hCtrl, DP_DATA_
0910: 43 48 41 4e 47 45 2c 20 4d 41 4b 45 57 4f 52 44  CHANGE, MAKEWORD
0920: 28 44 50 5f 52 45 53 45 54 2c 20 28 42 59 54 45  (DP_RESET, (BYTE
0930: 29 6d 5f 52 65 67 69 6f 6e 54 79 70 65 29 2c 20  )m_RegionType), 
0940: 28 4c 50 41 52 41 4d 29 70 44 61 74 61 52 6f 77  (LPARAM)pDataRow
0950: 29 3b 0d 0a 20 20 20 20 7d 3b 0d 0a 09 0d 0a 20  );..    };..... 
0960: 20 20 20 76 6f 69 64 20 53 65 74 43 75 72 72 65     void SetCurre
0970: 6e 74 52 6f 77 28 43 44 61 74 61 52 6f 77 2a 20  ntRow(CDataRow* 
0980: 70 44 61 74 61 52 6f 77 29 0d 0a 20 20 20 20 7b  pDataRow)..    {
0990: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 5f  ..        if (m_
09a0: 68 43 74 72 6c 20 26 26 20 70 44 61 74 61 52 6f  hCtrl && pDataRo
09b0: 77 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w)..            
09c0: 3a 3a 53 65 6e 64 4d 65 73 73 61 67 65 28 6d 5f  ::SendMessage(m_
09d0: 68 43 74 72 6c 2c 20 44 50 5f 44 41 54 41 5f 43  hCtrl, DP_DATA_C
09e0: 48 41 4e 47 45 2c 20 4d 41 4b 45 57 4f 52 44 28  HANGE, MAKEWORD(
09f0: 44 50 5f 43 55 52 52 4f 57 2c 20 28 42 59 54 45  DP_CURROW, (BYTE
0a00: 29 6d 5f 52 65 67 69 6f 6e 54 79 70 65 29 2c 20  )m_RegionType), 
0a10: 28 4c 50 41 52 41 4d 29 70 44 61 74 61 52 6f 77  (LPARAM)pDataRow
0a20: 29 3b 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20  );..    };....  
0a30: 20 20 2f 2f 51 75 65 72 79 20 72 6f 77 73 20 69    //Query rows i
0a40: 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 76 69  nterface..    vi
0a50: 72 74 75 61 6c 20 76 6f 69 64 20 51 75 65 72 79  rtual void Query
0a60: 52 6f 77 73 28 43 44 61 74 61 52 6f 77 2a 20 70  Rows(CDataRow* p
0a70: 52 6f 77 46 72 6f 6d 2c 20 69 6e 74 20 6e 52 6f  RowFrom, int nRo
0a80: 77 73 43 6f 75 6e 74 2c 20 69 6e 74 20 6e 50 61  wsCount, int nPa
0a90: 67 65 53 69 7a 65 48 69 6e 74 29 20 3d 20 30 3b  geSizeHint) = 0;
0aa0: 0d 0a 20 20 20 20 76 69 72 74 75 61 6c 20 43 44  ..    virtual CD
0ab0: 61 74 61 52 6f 77 2a 20 46 65 74 63 68 28 29 20  ataRow* Fetch() 
0ac0: 3d 20 30 3b 0d 0a 20 20 20 20 76 69 72 74 75 61  = 0;..    virtua
0ad0: 6c 20 42 4f 4f 4c 20 52 65 66 72 65 73 68 52 6f  l BOOL RefreshRo
0ae0: 77 28 43 44 61 74 61 52 6f 77 2a 20 70 52 6f 77  w(CDataRow* pRow
0af0: 46 72 6f 6d 29 20 3d 20 30 3b 0d 0a 20 20 20 20  From) = 0;..    
0b00: 76 69 72 74 75 61 6c 20 42 4f 4f 4c 20 43 6f 6d  virtual BOOL Com
0b10: 70 61 72 65 52 6f 77 73 28 43 44 61 74 61 52 6f  pareRows(CDataRo
0b20: 77 2a 20 70 52 6f 77 31 2c 20 43 44 61 74 61 52  w* pRow1, CDataR
0b30: 6f 77 2a 20 70 52 6f 77 32 29 20 63 6f 6e 73 74  ow* pRow2) const
0b40: 20 3d 20 30 3b 0d 0a 20 20 20 20 76 69 72 74 75   = 0;..    virtu
0b50: 61 6c 20 4c 50 43 53 54 52 20 47 65 74 4c 61 73  al LPCSTR GetLas
0b60: 74 45 72 72 6f 72 28 29 20 7b 72 65 74 75 72 6e  tError() {return
0b70: 20 4e 55 4c 4c 3b 7d 3b 0d 0a 20 20 20 20 76 69   NULL;};..    vi
0b80: 72 74 75 61 6c 20 42 4f 4f 4c 20 47 65 74 52 6f  rtual BOOL GetRo
0b90: 77 43 6f 75 6e 74 28 55 49 4e 54 2a 20 70 43 6f  wCount(UINT* pCo
0ba0: 75 6e 74 29 20 7b 72 65 74 75 72 6e 20 46 41 4c  unt) {return FAL
0bb0: 53 45 3b 7d 3b 0d 0a 0d 0a 20 20 20 20 76 69 72  SE;};....    vir
0bc0: 74 75 61 6c 20 76 6f 69 64 20 51 75 65 72 79 46  tual void QueryF
0bd0: 69 65 6c 64 28 4c 50 43 53 54 52 20 73 7a 46 69  ield(LPCSTR szFi
0be0: 65 6c 64 4e 61 6d 65 29 20 7b 7d 3b 0d 0a 20 20  eldName) {};..  
0bf0: 20 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 52    virtual void R
0c00: 65 6c 65 61 73 65 46 69 65 6c 64 28 4c 50 43 53  eleaseField(LPCS
0c10: 54 52 20 73 7a 46 69 65 6c 64 4e 61 6d 65 29 20  TR szFieldName) 
0c20: 7b 7d 3b 0d 0a 20 20 20 20 76 69 72 74 75 61 6c  {};..    virtual
0c30: 20 76 6f 69 64 20 4f 6e 46 69 65 6c 64 73 43 68   void OnFieldsCh
0c40: 61 6e 67 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  anged()..    {..
0c50: 20 20 20 20 20 20 20 20 69 66 20 28 6d 5f 68 43          if (m_hC
0c60: 74 72 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  trl)..        {.
0c70: 0a 23 69 66 64 65 66 20 4f 50 54 49 4d 49 5a 45  .#ifdef OPTIMIZE
0c80: 5f 46 49 45 4c 44 53 5f 43 48 41 4e 47 45 0d 0a  _FIELDS_CHANGE..
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 4d 53 47 20              MSG 
0ca0: 6d 73 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  msg;..          
0cb0: 20 20 3a 3a 50 65 65 6b 4d 65 73 73 61 67 65 28    ::PeekMessage(
0cc0: 26 6d 73 67 2c 20 6d 5f 68 43 74 72 6c 2c 20 44  &msg, m_hCtrl, D
0cd0: 50 5f 44 41 54 41 5f 43 48 41 4e 47 45 2c 20 44  P_DATA_CHANGE, D
0ce0: 50 5f 44 41 54 41 5f 43 48 41 4e 47 45 2c 20 50  P_DATA_CHANGE, P
0cf0: 4d 5f 52 45 4d 4f 56 45 29 3b 0d 0a 20 20 20 20  M_REMOVE);..    
0d00: 20 20 20 20 20 20 20 20 3a 3a 50 6f 73 74 4d 65          ::PostMe
0d10: 73 73 61 67 65 28 6d 5f 68 43 74 72 6c 2c 20 44  ssage(m_hCtrl, D
0d20: 50 5f 44 41 54 41 5f 43 48 41 4e 47 45 2c 20 44  P_DATA_CHANGE, D
0d30: 50 5f 46 49 45 4c 44 53 2c 20 30 29 3b 0d 0a 23  P_FIELDS, 0);..#
0d40: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
0d50: 20 20 3a 3a 53 65 6e 64 4d 65 73 73 61 67 65 28    ::SendMessage(
0d60: 6d 5f 68 43 74 72 6c 2c 20 44 50 5f 44 41 54 41  m_hCtrl, DP_DATA
0d70: 5f 43 48 41 4e 47 45 2c 20 4d 41 4b 45 57 4f 52  _CHANGE, MAKEWOR
0d80: 44 28 44 50 5f 46 49 45 4c 44 53 2c 20 28 42 59  D(DP_FIELDS, (BY
0d90: 54 45 29 6d 5f 52 65 67 69 6f 6e 54 79 70 65 29  TE)m_RegionType)
0da0: 2c 20 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  , 0);..#endif.. 
0db0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 3b         }..    };
0dc0: 0d 0a 0d 0a 20 20 20 20 76 69 72 74 75 61 6c 20  ....    virtual 
0dd0: 44 61 74 61 54 79 70 65 20 47 65 74 51 75 69 63  DataType GetQuic
0de0: 6b 53 65 61 72 63 68 54 79 70 65 28 4c 50 43 53  kSearchType(LPCS
0df0: 54 52 20 73 7a 46 69 65 6c 64 4e 61 6d 65 29 20  TR szFieldName) 
0e00: 7b 72 65 74 75 72 6e 20 64 74 55 6e 64 65 66 69  {return dtUndefi
0e10: 6e 65 64 3b 7d 3b 0d 0a 20 20 20 20 76 69 72 74  ned;};..    virt
0e20: 75 61 6c 20 76 6f 69 64 20 51 75 69 63 6b 53 65  ual void QuickSe
0e30: 61 72 63 68 28 73 74 51 75 69 63 6b 53 65 61 72  arch(stQuickSear
0e40: 63 68 50 61 74 74 65 72 6e 26 20 51 53 50 61 74  chPattern& QSPat
0e50: 74 65 72 6e 29 20 7b 7d 3b 0d 0a 0d 0a 70 72 6f  tern) {};....pro
0e60: 74 65 63 74 65 64 3a 0d 0a 20 20 20 20 76 69 72  tected:..    vir
0e70: 74 75 61 6c 20 76 6f 69 64 20 4f 6e 41 74 74 61  tual void OnAtta
0e80: 63 68 28 29 20 7b 7d 3b 0d 0a 20 20 20 20 76 69  ch() {};..    vi
0e90: 72 74 75 61 6c 20 76 6f 69 64 20 4f 6e 44 65 74  rtual void OnDet
0ea0: 61 63 68 28 29 20 7b 7d 3b 0d 0a 70 72 69 76 61  ach() {};..priva
0eb0: 74 65 3a 0d 0a 20 20 20 20 48 57 4e 44 20 6d 5f  te:..    HWND m_
0ec0: 68 43 74 72 6c 3b 0d 0a 09 52 65 67 69 6f 6e 54  hCtrl;...RegionT
0ed0: 79 70 65 20 6d 5f 52 65 67 69 6f 6e 54 79 70 65  ype m_RegionType
0ee0: 3b 0d 0a 7d 3b 0d 0a                             ;..};..