RSS 2.0 Feed
技术心得
摘要:第一章 前言... 1 1 文档约定... 9 2 常用术语和缩写... 9 2.1 MSDN.. 9 2.1.1 微软知识库... 9 2.1.2 MSDN杂志/MSJ. 10 2.1.2.1 C++Q&A. 10 2.1.2.2 Win32Q&A. 10 2.1.2.3 Ask Dr. GUI 10 2.1.2.4 Microsoft Interactive Developer. 10 2.1.3 平台SDK. 10 2.1.3.1 头文件和库文件... 10 2.1.3.2 文档... 10 2.2 SDK. 10 2.3 API 10 2.4 DLL. 11 2.5 GDI 11 2.6 DirectX.. 11 2.7 COM.. 12 2.8 OLE. 13 2.9 ActiveX.. 13 2.10 CRT. 13 2.11 MFC. 13 2.11.1 MFC技术文档... 13 2.12 ATL. 13 2.13 STL. 13 2.14 ODBC (Open DataBase Connectivity) 14 2.15 DAO (Data Access Object) 14 2.16 OLE DB(Object Link and Embedding DataBase) 14 2.17 ADO(ActiveX Data Object) 14 2.18 钩子(HOOK):... 15 第二章 C语言和CRT. 15 1 如何生成指定范围内的字符串... 15 2 如何把阳历日期转化成农历... 15 3 如何从字符串中按分隔符提取字符串... 15 4 如何初始化一个GUID数组?... 15 5 如何对一个数组进行快速排序... 16 6 为什么析构函数总是虚函数?如果这是必要的,那么为什么C++不把虚析构函数直接作为默认值?为什么纯虚析构函数可以通过编译,但是不能通过连接?... 18 7 为什么一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?    18 第三章 平台SDK. 20 1 基本服务... 20 1.1......[阅读全文]

posted @ | Feedback (9) |

摘要:??? //{{Jiangsheng的垃圾代码(对话框数据交换)class?CDataTypeFieldExChange;//CTextFieldEdit是一个派生于CEdit,绑定到记录集字段的编辑框//lpszFieldName是绑定的字段的名称//vt是绑定的字段的类型 void ?DDX_TextField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl,LPCTSTR lpszFieldName,VARTYPE vt=VT_BSTR); //DDX_TextField的封装;自动从数据类型获取字段名称:描述/别名/标识字段;并且有简单的验证 void ?DDX_InfoField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl);void ?DDX_AliasField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl);void ?DDX_IDField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl); void DDX_AliasField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl){?DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strAliasField);?switch(pDX->m_pDTC->m_adReason){?case?adRsnAddNew:?case?adRsnUpdate:?case?adRsnDelete:??if(pDX->m_pDX->m_bSaveAndValidate){???CString strText;???rControl.GetWindowText(strText);???if(strText.FindOneOf(T("/\\*?[]\"<>"))!=-1){????CString strTemp;????strTemp.Format(_T("%s不能包含以下字符: / \\ * ? [ ] \" < > : |")?????,pDX->m_pDTC->m_pDataType->m_strAliasField);????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???}??}?}} void DDX_IDField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit&? rControl){?if(pDX->m_pDX->m_bSaveAndValidate){??TRACE_LINE(_T("Ignore DDX for %s/%s")???,pDX->m_pDTC->m_pDataType->m_strDataType???,pDX->m_pDTC->m_pDataType->m_strIDField???;?}?else{??DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strIDField);?}} void DDX_InfoField(CDataTypeFieldExChange* pDX, int nIDC, CTextFieldEdit& rControl){?DDX_TextField(pDX,nIDC,rControl,pDX->m_pDTC->m_pDataType->m_strInfoField);?switch(pDX->m_pDTC->m_adReason){?case?adRsnAddNew:?case?adRsnUpdate:?case?adRsnDelete:??if(pDX->m_pDX->m_bSaveAndValidate){???CString strText;???rControl.GetWindowText(strText);???if(strText.IsEmpty()){????CString strTemp;????strTemp.Format(_T("%s不能为空!"),pDX->m_pDTC->m_pDataType->m_strInfoField);????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???}???if(strText.FindOneOf(T("/\\*?[]\"<>"))!=-1){????CString strTemp;????strTemp.Format(_T("%s不能包含以下字符: / \\ * ? [ ] \" < > : |",pDX->m_pDTC->m_pDataType- >m_strInfoField));????::AfxMessageBox(strTemp);????pDX->m_pDX->Fail();???} ??}??else{???if(!pDX->m_pDTC->m_strAddNew.IsEmpty()){????rControl.SetWindowText(pDX->m_pDTC->m_strAddNew);???}??}?}} void DDX_TextField(CDataTypeFieldExChange* pDX???? , int nIDC???? , CTextFieldEdit& rControl???? ,LPCTSTR lpszFieldName???? ,VARTYPE vt//=VT_BSTR){?FieldsPtr?pFields=pDX->m_pRecordset->Fields;?CString strFieldName(lpszFieldName);?CDataType* pDT=pDX->m_pDTC->m_pDataType; ?CString strVal;?if (!pDX->m_pDX->m_bSaveAndValidate){??switch(pDX->m_pDTC->m_adReason){??case?adRsnAddNew:??case?adRsnUpdate:??case?adRsnDelete:???if(!strFieldName.IsEmpty()){????strVal=g_GetValueString(pFields->Item[lpszFieldName]->Value);???}???else{????ASSERT(FALSE);???} ??}?}?DDX_Control(pDX->m_pDX,nIDC,rControl);?DDX_Text(pDX->m_pDX,nIDC,strVal); ?if(pDX->m_pDX->m_bSaveAndValidate){??switch(pDX->m_pDTC->m_adReason){??case?adRsnAddNew:??case?adRsnUpdate:??case?adRsnDelete:???{????_variant_t varVal;????if(g_SetValueString(varVal,strVal,vt)){?????TRACE_LINE(_T("Set Field %s to %s\n"),lpszFieldName,strVal);?????if(!strFieldName.IsEmpty()){??????pFields->Item[lpszFieldName]->Value=varVal;?????}?????else{??????ASSERT(FALSE);?????}????}???}??}?}?else{??//编辑框的前一个控件是其标题,其文字从数据库中的类型定义获得??CWnd* pStatic=rControl.GetNextWindow(GW_HWNDPREV);??CString strCaption=pDT->GetFieldProperty(lpszFieldName,_T("Caption"));??if(pStatic&&!strCaption.IsEmpty()){???pStatic->SetWindowText(strCaption);??}??rControl.SetClientTipText(pDT->GetFieldProperty(lpszFieldName,_T("Comments")));?} }??? //}}End......[阅读全文]

posted @ | Feedback (0) |

摘要: 设置(Profile) 一个设置是一个ASF的配置(configuration)的描述数据集合。一个设置必须至少包含一个流的配置设置。 流信息设置中的流信息包含流的比特率(bit rate),缓冲窗口和媒体属性的设置。视频和音频的流信息准确描述了文件中的媒体配置,包括压缩数据使用的编码和解码器(如果有的话)。 一个设置也包含很多创建ASF文件时使用的ASF的特性,这包括互斥、媒体优先级、带宽共享和数据单位扩展。 每次写文件时必须提供设置。你可以调用IWMWriter::SetProfile指定一个设置。 设置有三种形式,应用程序中设置对象包含的数据,XML文件,或者ASF文件头。 设置对象可以用设置管理器创建空设置对象,然后从现有数据载入设置 XML文件具有PRX扩展名.注意Windows Media 9 Series 中没有原来的系统设置(system profiles)也不再使用,而作为这种形式存在。保存自定义设置时必须保存成这种文件。 ASF文件头ASF读者创建一个设置对象,然后从ASF文件头载入格式信息。但是修改文件头不会影响文件的内容。可以重新对文件编码来完成格式的修改。 使用设置编辑器除了用Windows Media Format SDK之外,还可以用Windows Media Encoder 9 Series中包含的设置编辑器创建设置。在应用程序中使用IWMProfileManager::LoadProfileByData载入预定义的设置。但是,启用“视频大小:和输入相同”这个选项将设置视频的大小为0;Windows Media Encoder 9 Series可以识别并且处理这种情况,但是Windows Media Format SDK的写入对象不会自动处理,所以应用程序必须并且处理这种情况. 下面是一个XML格式的配置 <profile version="589824" storageformat="1" name="ICW" description="ICW Stream"> // 73647561-0000-0010-8000-00AA00389B71  'auds' == WMMEDIATYPE_Audio  <streamconfig majortype="{73647561-0000-0010-8000-00AA00389B71}" streamnumber="1" streamname="Audio Stream" inputname="Audio804" bitrate="1411200" bufferwindow="-1" reliabletransport="0" decodercomplexity="" rfc1766langid="zh-cn">  // 00000001-0000-0010-8000-00AA00389B71            WMMEDIASUBTYPE_PCM   <wmmediatype subtype="{00000001-0000-0010-8000-00AA00389B71}" bfixedsizesamples="1" btemporalcompression="0" lsamplesize="4">     <waveformatex wFormatTag="1" nChannels="2" nSamplesPerSec="44100" nAvgBytesPerSec="176400" nBlockAlign="4" wBitsPerSample="16" />     </wmmediatype>   </streamconfig>   // 73647561-0000-0010-8000-00AA00389B71  'auds' == WMMEDIATYPE_Audio  <streamconfig majortype="{73646976-0000-0010-8000-00AA00389B71}" streamnumber="2" streamname="Video Stream" inputname="Video804" bitrate="4000" bufferwindow="1000" reliabletransport="0" decodercomplexity="AU" rfc1766langid="zh-cn">    <videomediaprops maxkeyframespacing="80000000" quality="35" />     // 56555949-0000-0010-8000-00AA00389B71  'YV12' ==  MEDIASUBTYPE_IYUV   <wmmediatype subtype="{56555949-0000-0010-8000-00AA00389B71}" bfixedsizesamples="1" btemporalcompression="0" lsamplesize="0">   <videoinfoheader dwbitrate="4000" dwbiterrorrate="0" avgtimeperframe="1000000">      <rcsource left="0" top="0" right="0" bottom="0" />  ......[阅读全文]

posted @ | Feedback (9) |

摘要:UINT AfxGetDocTemplateId(CDocTemplate* pDocTemplate){    // Helper class to extract the m_nIDResource member    class CHelperDocTemplate : public CDocTemplate    {    public:        CHelperDocTemplate():CDocTemplate(0, NULL, NULL, NULL){}        UINT GetResourceId(){return m_nIDResource;}    };    return  ((CHelperDocTemplate*)pDocTemplate)->GetResourceId();}CDocTemplate* AfxFindDocTemplate(UINT nIDResource){    POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();    while ( pos )    {        CDocTemplate* pDocTemplate = AfxGetApp()->GetNextDocTemplate(pos);        if ( AfxGetDocTemplateId(pDocTemplate) == nIDResource )            return pDocTemplate;    }    return NULL; // Not found}...[阅读全文]

posted @ | Feedback (0) |

摘要:Jiangsheng wrote: How to convert RGB565 to RGB24?my conversion seems wrongvoid  CScreenInput::CopyRGBPixels(DDSURFACEDESC* psdSrc,LPBYTE lpSrc,LPBYTElpDest,BOOL bInvert){/**/ DDPIXELFORMAT& rpfSrc=psdSrc->ddpfPixelFormat; DWORD dwHeight=psdSrc->dwHeight; DWORD dwWidth=psdSrc->dwWidth; long lPitchSrc=bInvert?-psdSrc->lPitchsdSrc->lPitch; long lPitchTgt=dwWidth*3; LPBYTE lpStart=bInvert?lpSrc+psdSrc->lPitch*(psdSrc->dwHeight-1):lpSrc; LPBYTE lpSrcLine=lpStart; LPBYTE lpTgtLine=lpDest; LPBYTE lpSrcPos; LPBYTE lpTgtPos; DWORD i,j; switch(rpfSrc.dwRGBBitCount){ case 16:  for(i = 0; i < dwHeight; i++) {   lpSrcPos=lpSrcLine;   lpTgtPos=lpTgtLine;   for(j = 0; j < dwWidth; j++) {    WORD wPixel=*(WORD*)lpSrcPos;    *lpTgtPos=(wPixel&0xF800)/256;lpTgtPos++;//0x10000/0x800    *lpTgtPos=(wPixel&0x07E0)/8;lpTgtPos++;//0x800/0x100    *lpTgtPos=(wPixel&0x001F)*8;lpTgtPos++;//0x100/0x20    lpSrcPos+=2;   }   lpSrcLine+=lPitchSrc;   lpTgtLine+=lPitchTgt;  }  break; Jan Michalowsky wrote:Hi I can give u my translation part from 16bpp to 24bppif (th.BPP = 16) {char *pTempData;unsigned short a;pTempData = new char[ImageSize];memmove(pTempData, pImageData, ImageSize);ImageSize = nWidth * nHeight * 3;delete [] pImageData;pImageData = new char[ImageSize];for (i = 0; i < (ImageSize / 3); i++)......[阅读全文]

posted @ | Feedback (1) |

摘要:VC.Net的WizardBar没有了,OpenInclude功能也没有了,写程序好麻烦…… VC.Net的类向导在那里? VC.Net的HTML编辑器好烂,还是用Frontpage好些。...[阅读全文]

posted @ | Feedback (1) |