tchar是什么类型 &&dynamic_cast&&L TEXT和 _T的区别

本文介绍了Windows环境下不同字符集(如ANSI与Unicode)间的转换方法,包括如何使用_L、_T宏及TEXT宏来适配不同的编译环境,并讨论了TCHAR类型的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows为了消除各编译器的差别,重新定义了一些数据类型。CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组成。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。

 

dynamic_cast : 是安全的类型转化   转化成功不成功是可控的  不成功返回0    B* b = dynamic_cast(*B) a;  表达的意思是  希望a是B*类型 然而static_cast就是相当于C语言里面的强转

 

 

对于从VC++6.0转到VS2005编译环境中的程序员。往往会碰到字符集之间的转换。 VC6.0采用的是ANSI字符集,而VS2005或者VS2008是采用的Unicode字符集。

L: 比如创建一个窗口类:HWND hWnd=CreateWindow(L"ClassName",L"最简单的Direct3D程序",                            WS_OVERLAPPEDWINDOW,200,100,600,500,                             NULL,NULL,wc.hInstance,NULL); L的作用:是将ANSI字符串转换成Unicode字符串,也就是每个字符占用两个字节。比如:    strlen("asd")=3;    strlen(L"asd")=6;

_T:   _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式    如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("ABCD") 相当于L"ABCD",这是宽字符串。 如果没有定义,那么_T宏不会在字符串前面加那个L,_T("ABCD") 就等价于"ABCD" 因此_T相当于自动转换字符集。

TEXT:  功能与_T相似,在 ASCII 模式下,它们被忽略,也就是说被预处理器删除掉,但是如果定义了UNICODE, 则它们会将常量字符串转换成等价的 UNICODE 。    TEXT 宏的主要作用是当定义了 UNICODE/_UNICODE 预处理指令时,字符串被标志为双字节字符串,否则字符串被标示为 ANSI 字符串。

TEXT 的定义如下: TEXT( LPTSTR string // ANSI 或者 Unicode 字符串 );

 

 

推荐使用    TCHAR  ch[12] = _T("cccc")

  TCHAR ma[2]={L'a',L'b'};

// B2saomiaotuxiangchuangkou.cpp : 实现文件 // #include "stdafx.h" #include "Imageprocessing.h" #include "B2saomiaotuxiangchuangkou.h" #include "afxdialogex.h" // B2saomiaotuxiangchuangkou 对话框 IMPLEMENT_DYNAMIC(B2saomiaotuxiangchuangkou, CDialogEx) B2saomiaotuxiangchuangkou::B2saomiaotuxiangchuangkou(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_B2saomiaotuxiangchuangkou, pParent) { //m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } //B2saomiaotuxiangchuangkou::~B2saomiaotuxiangchuangkou() //{ //} void B2saomiaotuxiangchuangkou::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_FOLDER_PATH, m_editFolderPath); DDX_Control(pDX, IDC_LIST_IMAGES, m_listImages); DDX_Control(pDX, IDC_STATIC_ORIGINAL_IMAGE, m_staticOriginalImage); DDX_Control(pDX, IDC_STATIC_PROCESSED_IMAGE, m_staticProcessedImage); DDX_Control(pDX, IDC_COMBO_SAVE_OPTION, m_comboSaveOption); } BEGIN_MESSAGE_MAP(B2saomiaotuxiangchuangkou, CDialogEx) ON_WM_PAINT() ON_WM_TIMER() ON_WM_MOUSEWHEEL() ON_BN_CLICKED(IDC_BUTTON_SELECT_FOLDER, &B2saomiaotuxiangchuangkou::OnBnClickedButtonSelectFolder) ON_BN_CLICKED(IDC_BUTTON_START, &B2saomiaotuxiangchuangkou::OnBnClickedButtonStart) ON_BN_CLICKED(IDC_BUTTON_PAUSE, &B2saomiaotuxiangchuangkou::OnBnClickedButtonPause) ON_BN_CLICKED(IDC_BUTTON_STOP, &B2saomiaotuxiangchuangkou::OnBnClickedButtonStop) ON_BN_CLICKED(IDC_BUTTON_RESET, &B2saomiaotuxiangchuangkou::OnBnClickedButtonReset) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_IMAGES, &B2saomiaotuxiangchuangkou::OnLvnItemchangedListImages) ON_MESSAGE(WM_UPDATE_IMAGE, [](WPARAM wParam, LPARAM lParam) { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)lParam; pThis->DisplayImage((int)wParam); return 0; }) ON_MESSAGE(WM_PROCESSING_DONE, [](WPARAM wParam, LPARAM lParam) { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)lParam; pThis->ResetProcessing(); return 0; }) ON_MESSAGE(WM_UPDATE_IMAGE, &B2saomiaotuxiangchuangkou::OnUpdateImage) ON_MESSAGE(WM_PROCESSING_DONE, &B2saomiaotuxiangchuangkou::OnProcessingDone) END_MESSAGE_MAP() BOOL B2saomiaotuxiangchuangkou::OnInitDialog() { CDialogEx::OnInitDialog(); /*SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE);*/ // 初始化列表控件 m_listImages.InsertColumn(0, _T("图片文件"), LVCFMT_LEFT, 300); m_listImages.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 初始化下拉框 m_comboSaveOption.AddString(_T("覆盖原图")); m_comboSaveOption.AddString(_T("另存为")); m_comboSaveOption.SetCurSel(0); m_comboSaveOption.EnableWindow(FALSE); // 初始按钮状态 GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); return TRUE; } void B2saomiaotuxiangchuangkou::OnBnClickedButtonSelectFolder() { CString strFolder; BROWSEINFO bi = { 0 }; bi.lpszTitle = _T("选择图片文件夹"); LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if (pidl != nullptr) { TCHAR szPath[MAX_PATH]; if (SHGetPathFromIDList(pidl, szPath)) { m_strFolderPath = szPath; m_editFolderPath.SetWindowText(m_strFolderPath); LoadImageList(); m_comboSaveOption.EnableWindow(TRUE); UpdateButtonStates(); } CoTaskMemFree(pidl); } } void B2saomiaotuxiangchuangkou::LoadImageList() { m_listImages.DeleteAllItems(); m_imageFiles.RemoveAll(); CFileFind finder; BOOL bWorking = finder.FindFile(m_strFolderPath + _T("\\*.*")); int nIndex = 0; while (bWorking) { bWorking = finder.FindNextFile(); if (finder.IsDots()) continue; if (!finder.IsDirectory()) { CString strFile = finder.GetFileName(); CString strExt = strFile.Right(3); strExt.MakeLower(); if (strExt == _T("jpg") || strExt == _T("jpeg") || strExt == _T("bmp") || strExt == _T("png")) { m_listImages.InsertItem(nIndex, strFile); m_imageFiles.Add(finder.GetFilePath()); nIndex++; } } } finder.Close(); if (m_imageFiles.GetSize() > 0) { m_nCurrentIndex = 0; DisplayImage(0); GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE); } } void B2saomiaotuxiangchuangkou::DisplayImage(int nIndex) { if (nIndex < 0 || nIndex >= m_imageFiles.GetSize()) return; m_nCurrentIndex = nIndex; m_currentImage.Destroy(); if (SUCCEEDED(m_currentImage.Load(m_imageFiles[nIndex]))) { m_staticOriginalImage.Invalidate(); m_staticProcessedImage.Invalidate(); } } void B2saomiaotuxiangchuangkou::DisplayProcessedImage() { if (m_processedImage.IsNull()) return; m_staticProcessedImage.Invalidate(); } void B2saomiaotuxiangchuangkou::OnPaint() { CDialogEx::OnPaint(); if (m_currentImage.IsNull()) return; // 绘制原图 CDC* pDC = m_staticOriginalImage.GetDC(); CRect rect; m_staticOriginalImage.GetClientRect(&rect); pDC->FillSolidRect(rect, RGB(240, 240, 240)); DrawImage(pDC, m_currentImage, rect, m_dZoomOriginal, m_ptZoomCenterOriginal); m_staticOriginalImage.ReleaseDC(pDC); // 绘制处理后的图像 if (!m_processedImage.IsNull()) { pDC = m_staticProcessedImage.GetDC(); m_staticProcessedImage.GetClientRect(&rect); pDC->FillSolidRect(rect, RGB(240, 240, 240)); DrawImage(pDC, m_processedImage, rect, m_dZoomProcessed, m_ptZoomCenterProcessed); m_staticProcessedImage.ReleaseDC(pDC); } } void B2saomiaotuxiangchuangkou::DrawImage(CDC* pDC, CImage& image, CRect rect, double dZoom, CPoint ptCenter) { int origWidth = image.GetWidth(); int origHeight = image.GetHeight(); // 计算保持比例的显示尺寸 double dAspect = (double)origHeight / (double)origWidth; int displayWidth = (int)(origWidth * dZoom); int displayHeight = (int)(origHeight * dZoom * dAspect); // 计算显示位置(居中) int x = ptCenter.x - (int)(displayWidth * (double)ptCenter.x / rect.Width()); int y = ptCenter.y - (int)(displayHeight * (double)ptCenter.y / rect.Height()); // 确保图像在控件范围内 if (x < 0) x = 0; if (y < 0) y = 0; if (x + displayWidth > rect.Width()) x = rect.Width() - displayWidth; if (y + displayHeight > rect.Height()) y = rect.Height() - displayHeight; // 绘制图像 image.StretchBlt(pDC->m_hDC, x, y, displayWidth, displayHeight, SRCCOPY); } BOOL B2saomiaotuxiangchuangkou::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { // 确定鼠标在哪个控件上 CRect rectOriginal, rectProcessed; m_staticOriginalImage.GetWindowRect(&rectOriginal); m_staticProcessedImage.GetWindowRect(&rectProcessed); if (rectOriginal.PtInRect(pt)) { // 原图缩放 double dFactor = (zDelta > 0) ? 1.1 : 0.9; m_dZoomOriginal *= dFactor; // 限制缩放范围 if (m_dZoomOriginal < 0.1) m_dZoomOriginal = 0.1; if (m_dZoomOriginal > 5.0) m_dZoomOriginal = 5.0; // 设置缩放中心点 m_ptZoomCenterOriginal = pt - rectOriginal.TopLeft(); m_staticOriginalImage.Invalidate(); } else if (rectProcessed.PtInRect(pt)) { // 处理后图像缩放 double dFactor = (zDelta > 0) ? 1.1 : 0.9; m_dZoomProcessed *= dFactor; // 限制缩放范围 if (m_dZoomProcessed < 0.1) m_dZoomProcessed = 0.1; if (m_dZoomProcessed > 5.0) m_dZoomProcessed = 5.0; // 设置缩放中心点 m_ptZoomCenterProcessed = pt - rectProcessed.TopLeft(); m_staticProcessedImage.Invalidate(); } return CDialogEx::OnMouseWheel(nFlags, zDelta, pt); } void B2saomiaotuxiangchuangkou::OnLvnItemchangedListImages(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVIS_SELECTED)) { if (m_bProcessing) { // 处理过程中:临时显示3秒 m_bUserBrowsing = TRUE; PostMessage(WM_UPDATE_IMAGE, pNMLV->iItem, (LPARAM)this); SetTimer(1, 3000, nullptr); // 3秒定时器 } else { // 非处理状态:持续显示 DisplayImage(pNMLV->iItem); } } *pResult = 0; } void B2saomiaotuxiangchuangkou::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == 1 && m_bUserBrowsing) { KillTimer(1); m_bUserBrowsing = FALSE; DisplayImage(m_nProcessingIndex); // 切回处理中的图片 } CDialogEx::OnTimer(nIDEvent); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonStart() { if (m_imageFiles.GetSize() == 0) return; m_bProcessing = TRUE; m_nProcessingIndex = 0; UpdateButtonStates(); // 启动处理线程 AfxBeginThread([](LPVOID pParam) -> UINT { B2saomiaotuxiangchuangkou* pThis = (B2saomiaotuxiangchuangkou*)pParam; while (pThis->m_nProcessingIndex < pThis->m_imageFiles.GetSize()) { if (pThis->m_bPaused) { Sleep(100); continue; } // 更新显示 pThis->PostMessage(WM_UPDATE_IMAGE, pThis->m_nProcessingIndex, (LPARAM)pThis); // 处理当前图像 pThis->ProcessCurrentImage(); pThis->DisplayProcessedImage(); // 保存处理结果 pThis->SaveProcessedImage(); pThis->m_nProcessingIndex++; Sleep(500); // 模拟处理时间 } pThis->PostMessage(WM_PROCESSING_DONE, 0, (LPARAM)pThis); return 0; }, this); } void B2saomiaotuxiangchuangkou::ProcessCurrentImage() { if (m_currentImage.IsNull()) return; // 示例处理:转换为灰度图 m_processedImage.Destroy(); m_processedImage.Create(m_currentImage.GetWidth(), m_currentImage.GetHeight(), m_currentImage.GetBPP()); for (int y = 0; y < m_currentImage.GetHeight(); y++) { for (int x = 0; x < m_currentImage.GetWidth(); x++) { COLORREF color = m_currentImage.GetPixel(x, y); BYTE r = GetRValue(color); BYTE g = GetGValue(color); BYTE b = GetBValue(color); BYTE gray = static_cast<BYTE>(0.299 * r + 0.587 * g + 0.114 * b); m_processedImage.SetPixel(x, y, RGB(gray, gray, gray)); } } } void B2saomiaotuxiangchuangkou::SaveProcessedImage() { if (m_processedImage.IsNull()) return; int nOption = m_comboSaveOption.GetCurSel(); CString strPath; if (nOption == 0) { // 覆盖原图 strPath = m_imageFiles[m_nProcessingIndex]; } else { // 另存为 CString strDir = m_strFolderPath + _T("\\Processed"); CreateDirectory(strDir, nullptr); CString strFile; m_listImages.GetItemText(m_nProcessingIndex, 0, strFile); strPath = strDir + _T("\\") + strFile; } // 保存图像 HRESULT hr = m_processedImage.Save(strPath); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonPause() { m_bPaused = !m_bPaused; CButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON_PAUSE); pButton->SetWindowText(m_bPaused ? _T("继续") : _T("暂停")); UpdateButtonStates(); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonStop() { m_bProcessing = FALSE; m_bPaused = FALSE; GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(TRUE); } void B2saomiaotuxiangchuangkou::OnBnClickedButtonReset() { m_processedImage.Destroy(); m_staticProcessedImage.Invalidate(); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); } void B2saomiaotuxiangchuangkou::ResetProcessing() { m_bProcessing = FALSE; m_bPaused = FALSE; m_nProcessingIndex = -1; UpdateButtonStates(); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(TRUE); } void B2saomiaotuxiangchuangkou::UpdateButtonStates() { GetDlgItem(IDC_BUTTON_START)->EnableWindow(!m_bProcessing && m_imageFiles.GetSize() > 0); GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(m_bProcessing); GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(m_bProcessing); GetDlgItem(IDC_BUTTON_RESET)->EnableWindow(FALSE); } LRESULT B2saomiaotuxiangchuangkou::OnUpdateImage(WPARAM wParam, LPARAM lParam) { DisplayImage(static_cast<int>(wParam)); return 0; } LRESULT B2saomiaotuxiangchuangkou::OnProcessingDone(WPARAM wParam, LPARAM lParam) { ResetProcessing(); return 0; }报严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) 不存在从 "lambda []int (WPARAM wParam, LPARAM lParam)->int" 到 "LRESULT (CWnd::*)(WPARAM, LPARAM)" 的适当转换函数 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 45 错误(活动) 不存在从 "lambda []int (WPARAM wParam, LPARAM lParam)->int" 到 "LRESULT (CWnd::*)(WPARAM, LPARAM)" 的适当转换函数 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 50 错误(活动) 没有与参数列表匹配的 重载函数 "CListCtrl::GetItemText" 实例 Imageprocessing c:\Users\Administrator\Desktop\111\Imageprocessing\Imageprocessing\B2saomiaotuxiangchuangkou.cpp 353 错误 C2440 “static_cast”: 无法从“B2saomiaotuxiangchuangkou::GetThisMessageMap::<lambda_ac786482bcca587bd9cc736ece35bc71>”转换为“LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)” Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 49 错误 C2440 “static_cast”: 无法从“B2saomiaotuxiangchuangkou::GetThisMessageMap::<lambda_a9c7879179f942e6187dc0172c95ae29>”转换为“LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)” Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 54 错误 C2661 “CListCtrl::GetItemText”: 没有重载函数接受 3 个参数 Imageprocessing c:\users\administrator\desktop\111\imageprocessing\imageprocessing\b2saomiaotuxiangchuangkou.cpp 353
06-20
c++builder的多国语言实现 #ifndef EcLanguageH #define EcLanguageH //--------------------------------------------------------------------------- #include <Forms.hpp> #include <IniFiles.hpp> #include <tchar.h> // Language Class class TEcLanguage { private: String m_sLangPath; // Language file name String m_sCurFile; TStringList* m_pLangs; TStringList* m_pExts; String m_sLang; int m_nCurID; bool HasProperty(TComponent* aObject,String PropStr); int GetOperSystemLanID(); protected: // Load string for control virtual bool LoadLangFile(TForm* pFrm); // Save control caption to language file virtual void SetLangFile(TForm* pFrm); public: TEcLanguage(String sConfigPath); ~TEcLanguage(); bool SetLangID(int nID); int GetCurID(){return m_nCurID;}; TStringList* GetLangs(){return m_pLangs;}; String GetLanFile(){return m_sCurFile;}; // Load UI Language for one form bool LoadLanguage(TForm* pFrm){return LoadLangFile(pFrm);} // Save UI string and control size to specific file void SetLanguage(TForm* pFrm){SetLangFile(pFrm);}; // Load resource string for others except control String GetStr(int nNo, String sSection=_T("ResourceString"), String sKey=_T("Str")); }; #include <vcl.h> #pragma hdrstop #include "EcLanguage.h" #pragma package(smart_init) TEcLanguage::TEcLanguage(String sConfigPath) { // Languageファイルの場所を取って m_sLangPath = sConfigPath+_T("\\Language\\"); String sLang = m_sLangPath + _T("Lang.ini"); m_pExts = new TStringList; m_pExts->Clear(); m_pLangs = new TStringList; m_pLangs->Clear(); TIniFile* iniFile = new TIniFile(sLang); m_sLang = iniFile->ReadString("General", "AppName", "Daq3"); m_nCurID = iniFile->ReadInteger("General", "CurID", GetOperSystemLanID()); int nLangs = iniFile->ReadInteger("General", "Number", 4); String sTmp,sTmp1,sTmp2; for(int i=0;i<nLangs;++i){ sTmp.sprintf(_T("%03d_Ext"),i); sTmp1 = iniFile->ReadString("Lang", sTmp, ""); if(sTmp1=="") continue; sTmp.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),sTmp1.c_str()); if(!FileExists(sTmp)) continue; sTmp.sprintf(_T("%03d_Name"),i); sTmp2 = iniFile->ReadString("Lang", sTmp, ""); if(sTmp2=="") continue; m_pExts->Add(sTmp1); m_pLangs->Add(sTmp2); } delete iniFile; int nCnt = m_pLangs->Count; if(m_nCurID<0 || m_nCurID>=nCnt) m_nCurID = 0; if(nCnt==0){ m_nCurID = -1; }else{ m_sCurFile.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),m_pExts->Strings[m_nCurID].c_str()); } } TEcLanguage::~TEcLanguage() { String sLang = m_sLangPath + "Lang.ini"; TIniFile* iniFile = new TIniFile(sLang); iniFile->WriteInteger("General", "CurID", m_nCurID); delete iniFile; delete m_pLangs; delete m_pExts; } // ========================================================================== // Check specific property in the Object // return : ture - have the property // false - have not the property // ========================================================================== bool TEcLanguage::HasProperty(TComponent* aObject,String PropStr) { return (GetPropInfo(aObject, PropStr) != NULL); } // ========================================================================== // Name : LoadLangFile // Summary : Load Language string for one form // Call : LoadLangFile(this); // Parameter : pFrm : Form object opinter // Return : true / false // -------------------------------------------------------------------------- // [modify history]: // ========================================================================== bool TEcLanguage::LoadLangFile(TForm* pFrm) { if(-1==m_nCurID) return false; TIniFile* iniFile; iniFile = new TIniFile(m_sCurFile); if(!iniFile) return false; String sComponName = _T("None"); try{ String sTmp; String sFrmName = pFrm->Name; if(sFrmName==_T("")){ return false; } pFrm->Font->Name = TFontName(iniFile->ReadString(_T("General"), _T("FontName"), _T("Arial"))); pFrm->Font->Charset = TFontCharset(iniFile->ReadInteger(_T("General"), _T("Charset"), 1)); pFrm->Font->Size = iniFile->ReadInteger(_T("General"), _T("FontSize"), 9); sTmp = iniFile->ReadString(sFrmName,sFrmName,_T("")); if ((sTmp!=_T("")) && (pFrm->BorderStyle!=bsNone)) pFrm->Caption = sTmp; TControl* pControl; TFont* pFont; int nCount = pFrm->ComponentCount; for(int ix =0 ;ix<nCount;ix++){ if (HasProperty(pFrm->Components[ix],_T("Caption"))){ sComponName=_T(""); sComponName = pFrm->Components[ix]->Name; if(sComponName==_T("")) continue; sTmp = iniFile->ReadString(sFrmName,sComponName,""); if(sTmp!="") SetStrProp(pFrm->Components[ix],_T("Caption"), sTmp); if (!HasProperty(pFrm->Components[ix],_T("ParentFont"))) continue; pControl =dynamic_cast<TControl*>(pFrm->Components[ix]); if(((TForm*)pControl)->ParentFont) continue; pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,_T("Font"))); pFont->Charset = pFrm->Font->Charset; pFont->Name = pFrm->Font->Name; SetObjectProp(pFrm->Components[ix],_T("Font"),pFont); } //if (HasProperty(pFrm->Components[ix],"ParentFont")) //{ // pControl =dynamic_cast<TControl*>(pFrm->Components[ix]); // if(((TForm*)pControl)->ParentFont) continue; // // pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,"Font")); // pFont->Charset = pFrm->Font->Charset; // pFont->Name = pFrm->Font->Name; // SetObjectProp(pFrm->Components[ix],"Font",pFont); // //} } pFrm->Update(); }catch (Exception &exception){ Application->ShowException(&exception); }catch (...){ try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception); } } delete iniFile; return true; } // ========================================================================== // Name : SetLangFile // Summary : Save controls stirng of form to Language file // Call : SetLangFile(this); // Parameter : pFrm : Form object opinter // Return : void // -------------------------------------------------------------------------- // [modify history]: // ========================================================================== void TEcLanguage::SetLangFile(TForm* pFrm) { if(-1==m_nCurID) return; String sCaption; TIniFile* iniFile = new TIniFile(m_sCurFile); try{ iniFile->WriteString(pFrm->Name,pFrm->Name,pFrm->Caption); iniFile->WriteInteger("General", "Charset", pFrm->Font->Charset); iniFile->WriteString("General", "FontName", pFrm->Font->Name); iniFile->WriteInteger("General", "FontSize", pFrm->Font->Size); for(int ix =0 ;ix< pFrm->ComponentCount;ix++){ if (HasProperty(pFrm->Components[ix],_T("Caption")) ){ sCaption = GetStrProp(pFrm->Components[ix],_T("Caption")); if(sCaption!=""){ iniFile->WriteString(pFrm->Name,pFrm->Components[ix]->Name,sCaption); } } } }catch (Exception &exception){ Application->ShowException(&exception); }catch (...){ try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception); } } delete iniFile; } // ========================================================================== // Name : GetResourceString // Summary : Get one resource string to language file // Call : GetResourceString(Str1,"Form1") // Parameter : TmpStr : resoruce string // SectionStr : Section string of ini file // Return : string which read form the language file // -------------------------------------------------------------------------- // [modify history]: // ========================================================================== String TEcLanguage::GetStr(int nNo, String sSection, String sKey) { if(-1==m_nCurID) return "***"; String sText; TIniFile* iniFile = new TIniFile(m_sCurFile); sKey.sprintf(_T("%s%03d"),sKey.c_str(),nNo); sText = iniFile->ReadString(sSection,sKey,""); delete iniFile; return sText; } // ========================================================================== // Name : GetOperSystemLanID // Summary : get system language ID; // Call : GetOperSystemLanID(); // Parameter : None; // Return : int // -------------------------------------------------------------------------- // [modify history]: // ========================================================================== int TEcLanguage::GetOperSystemLanID() { LCID lanid = GetSystemDefaultLCID(); //API fun int nlanid = lanid; int nLanType = 0; char szLan[10]; itoa(nlanid,szLan,16); //english if (strcmp(szLan,"409")==0) nLanType=0; //simple chinese language if (strcmp(szLan,"804")==0) nLanType=1; //japan language if (strcmp(szLan,"411")==0) nLanType=2; //complicated chinese language if (strcmp(szLan,"404")==0) nLanType=3; //Spanish (Traditional Sort) language if (strcmp(szLan,"40a")==0) nLanType=4; //Spanish (Mexican) language if (strcmp(szLan,"80a")==0) nLanType=4; return nLanType; } bool TEcLanguage::SetLangID(int nID) { if(m_nCurID==nID) return false; m_nCurID = nID; m_sCurFile.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),m_pExts->Strings[m_nCurID].c_str()); return true; }
最新发布
08-09
#include <windows.h> #include <cmath> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("SinWave"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; if (!RegisterClass(&wndclass)) { MessageBox(NULL, TEXT("Program requires Windows NT!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppName, TEXT("Dynamic Sin Wave"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static double phase = 0.0; static UINT_PTR timerId = 0; switch (message) { case WM_CREATE: timerId = SetTimer(hwnd, 1, 50, NULL); // 每50毫秒触发一次WM_TIMER return 0; case WM_TIMER: phase += 0.1; // 更新相位 InvalidateRect(hwnd, NULL, TRUE); // 触发重绘 return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); RECT rect; GetClientRect(hwnd, &rect); // 绘制背景 FillRect(hdc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); // 绘制Sin曲线 int yCenter = rect.bottom / 2; int amplitude = 100; HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255)); SelectObject(hdc, hPen); MoveToEx(hdc, 0, yCenter, NULL); for (int x = 0; x < rect.right; x++) { double value = sin(phase + x * 0.05); // 调整频率 int y = yCenter - static_cast<int>(amplitude * value); LineTo(hdc, x, y); } DeleteObject(hPen); EndPaint(hwnd, &ps); return 0; } case WM_DESTROY: KillTimer(hwnd, timerId); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); } 改变其它形状
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值