void MGUI_Menu::Paint(MGUI_Base *pBaseParent) { if(!pParent||!m_bShow) return; if(pParent == pBaseParent) { if(((MGUI_Panel *)pBaseParent)->m_iClosing) return; // Draw Bg int iTotal = m_iNum; gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y,w,24*iTotal,255,255,0,100); // Draw Border // Up gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y-1,w,1,255,255,255,255); // Down gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*iTotal,w,1,255,255,255,255); // Left gEngfuncs.pfnFillRGBA(pParent->x+x-1,pParent->y+y,1,24*iTotal,255,255,255,255); // Right gEngfuncs.pfnFillRGBA(pParent->x+x+w,pParent->y+y,1,24*iTotal,255,255,255,255); // Draw Text for(int i=1;i<=m_iNum;i++) { if(m_iOnFocus == i) { gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*(i-1),w,24,255,255,0,200); } Fonts_SetSize(16,16); int iStartX = w - Fonts_GetLen(ANSIToUnicode(pText[i])); iStartX/=2; Fonts_SetColor(255,0,0,255); Fonts_Draw(ANSIToUnicode(pText[i]),pParent->x+x+iStartX,pParent->y+y+24*i-6,100,100); gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*i,w,1,255,255,255,255); } } }
void CSelectOnlineUserWnd::OnPrepare(TNotifyUI& msg) { WCHAR showText[128] = {0}; CDuiString duiText; m_pOnlineUserList = static_cast<UserListUI*>(m_pm.FindControl(_T("onlineSelectList"))); m_pOnlineUserList->SetListName(_T("onlineSelectList")); list<CGroupObject *>::iterator iter = m_pGroup->m_ListGroupInfo.begin(); for (; iter != m_pGroup->m_ListGroupInfo.end(); iter++) { ANSIToUnicode((*iter)->strName.c_str(), showText); UserListUI::Node* group = m_pOnlineUserList->AddNode(showText, 0); list<CUserObject * >::iterator iteruser = (*iter)->m_ListUserInfo.begin(); //m_pGroup->m_ListUserInfo.begin(); for (; iteruser != (*iter)->m_ListUserInfo.end(); iteruser++) { ANSIToUnicode((*iteruser)->UserInfo.nickname, showText); duiText = L"{x 12}"; duiText += showText; m_pOnlineUserList->AddNode(showText, (*iteruser)->UserInfo.uid,"", group); } } }
int ProcessCdCommand(LPPER_HANDLE_DATA PerHandleData, LPPER_IO_OPERATION_DATA PerIoData) { // 在结构体中显示此函数是否返回成功 char *beginFile = PerIoData->cmdBuffer + 2; while (*beginFile == '\t' || *beginFile == ' ') *beginFile++; char *tmpsubdir = PerIoData->cmdBuffer + (beginFile-PerIoData->cmdBuffer); if (strcmp(tmpsubdir, ".") == 0) { return 1; } if (strcmp(tmpsubdir, "..") == 0) { //wcout << PerHandleData->strCurrentWorkPath; TCHAR *curPath = PerHandleData->strCurrentWorkPath; int len = _tcslen(curPath); TCHAR* pEnd = curPath + len - 1; if (*pEnd == '\\') { *pEnd--; } while (*pEnd != '\\') { *pEnd--; } curPath[pEnd - curPath] = '\0'; _tcscpy_s(PerIoData->buffer, PerHandleData->strCurrentWorkPath); PerIoData->BufferLen = _tcslen(PerIoData->buffer); return 1; } int issubdir = issubFileOrDir(PerHandleData->strCurrentWorkPath, ANSIToUnicode(tmpsubdir)); // if issubdir == 1, this subdir is a dir. if (issubdir == 1) { TCHAR tmpCurDir[240]; memset((void *)tmpCurDir, 0, sizeof(tmpCurDir)); _tcscpy_s(tmpCurDir, PerHandleData->strCurrentWorkPath); if (tmpCurDir[_tcslen(tmpCurDir) - 1] != '\\') _tcscat_s(tmpCurDir, L"\\"); _tcscat_s(tmpCurDir, ANSIToUnicode(tmpsubdir)); //wcout << tmpCurDir << endl; _tcscpy_s(PerHandleData->strCurrentWorkPath, tmpCurDir); _tcscpy_s(PerIoData->buffer, PerHandleData->strCurrentWorkPath); PerIoData->BufferLen = _tcslen(PerIoData->buffer); return 1; } else if (issubdir == 2) { char tmp[1024]; sprintf_s(tmp, "%s is a file can't use cd command.\n", tmpsubdir); memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer)); _tcscpy_s(PerIoData->buffer, ANSIToUnicode(tmp)); return 2; } return -1; }
int ProcessWatch::WatchThread() { int times(0); int sumCpu(0); int aveCpu(0); while(times < 60) { int cpu = GetProcessCpuUsage(m_pid); sumCpu += cpu; Sleep(1000); times++; } aveCpu = sumCpu / times; HANDLE hProcess = OpenProcess(/*PROCESS_ALL_ACCESS,FALSE*/PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_TERMINATE, false, m_pid); if(aveCpu >= 30) { if(!TerminateProcess(hProcess, 0)) { WriteToLog(TEXT("Terminate the process failed"), GetLastError(), TRUE); return FALSE; } char str[MAX_BUF_PATH] = {}; TCHAR tstr[MAX_BUF_PATH] = {}; sprintf_s(str, sizeof(str), "process[%d] was kill\n", m_pid); _tcscpy_s(tstr, ANSIToUnicode(string(str)).c_str()); WriteToLog(tstr); } return 0; }
int ProcessGetCommand(LPPER_HANDLE_DATA PerHandleData, LPPER_IO_OPERATION_DATA PerIoData) { // get command: get [filename] char *beginFile = PerIoData->cmdBuffer + 3; while (*beginFile == '\t' || *beginFile == ' ') *beginFile++; char *filename = PerIoData->cmdBuffer + (beginFile-PerIoData->cmdBuffer); int isfile = issubFileOrDir(PerHandleData->strCurrentWorkPath, ANSIToUnicode(filename)); if (isfile == 1) { return 1; } else if (isfile == 2) { char tmpFullFilename[100] = { 0 }; sprintf_s(tmpFullFilename, "%s\\%s", UnicodeToANSI(PerHandleData->strCurrentWorkPath), filename); int sendSuccess = FileSend(PerHandleData->socket, tmpFullFilename); if (sendSuccess != TRAN_SUCCESS) { cout << "Send file " << filename << " failed.\n"; return -1; } return 2; } else { cout << "file " << filename << " is not existed.\n"; return -1; } return -1; }
void MGUI_Button::Click(void) { if(!m_bVisible || !m_bEnabled) return; g_mgui_keynum = -1; g_Next_Key_CanUse = g_flTime + 0.15; if(m_iType == MGUI_BUTTON_TYPE_CHANGE_NAME) { char *name = ((MGUI_Panel *)pParent)->GetTextEntryText(1); if(name) { char szCmd[64]; sprintf(szCmd,"name %s",UnicodeToUTF8(ANSIToUnicode(name))); MGUI_Send_Cmd(szCmd); } } else if(m_iType == MGUI_BUTTON_TYPE_COMMAND_CLOSEPANEL) { MGUI_Send_Cmd(pszCommand); ((MGUI_Panel *)pParent)->m_iClosing = 1; } else if(m_iType == MGUI_BUTTON_TYPE_CLOSEALL) { MGUI_Send_Cmd(pszCommand); ((MGUI_Panel *)pParent)->m_iClosing = 1; g_mgui_candraw = 0; } else { MGUI_Send_Cmd(pszCommand); } }
static char* ANSIToUTF8(MVMuint16 acp, const char* str) { wchar_t * const wstr = ANSIToUnicode(acp, str); char * const result = UnicodeToUTF8(wstr); free(wstr); return result; }
bool CServerComm::RegesiterUser(PTCHAR ptszUsername,PTCHAR ptszPassword,PTCHAR ptszPasswordReplay,PTCHAR ptszEmail, int& iErroCode, PTCHAR erroMsg) { PTCHAR pBuffer =NULL; TCHAR szLoginUrl[1024] = {0},szServerUrl[1024] = {0},szLocalPath[1024]; //验证两次密码是否same if(_tcscmp(ptszPasswordReplay,ptszPassword) != 0) { _tcscpy_s(erroMsg,MAX_PATH,regPassNotSameErro); return false; } //将密码md5加密 char szMd5Pass[33] = {0}; Md5Encode(ptszPassword,szMd5Pass); //获取当前目录 GetCurrentDirectory(1024,szLocalPath); if(GetLastError() != 0) return false; //将加密后的MD5转换为unicode字符 WCHAR * md5Pass = ANSIToUnicode(szMd5Pass); _tcscat_s(szLocalPath,1024,L"\\"); _tcscat_s(szLocalPath,1024,CONFIG_NAME); //获取请求地址 GetPrivateProfileString(_T("config"),_T("serverurlregi"),_T(""),szServerUrl,1024,szLocalPath); if(GetLastError() != 0) { _tcscpy_s(erroMsg,MAX_PATH,configErroMsg); return false; } _stprintf_s(szLoginUrl,1024,REGI_PARAM,szServerUrl,ptszUsername,md5Pass,ptszEmail); delete[] md5Pass; //发送请求读取回执 if(m_InterNetCon->InternetReadData(szLoginUrl,&pBuffer)) { int iStatus; if(GetStatusAndErroCode((char*)pBuffer,&iStatus,&iErroCode)) { if(iStatus == 0) { _tcscpy_s(erroMsg,MAX_PATH,regiErroCode[iErroCode]); return false; } } _tcscpy_s(erroMsg,MAX_PATH,regSuccessMsg); return true; } else { _tcscpy_s(erroMsg,MAX_PATH,commErroMsg); return false; } return true; }
// convert a string to a BSTR int CstrToBstr (char *str, BSTR *pbstr) { wchar_t *wsz = NULL; int status = TRUE; ANSIToUnicode(str, &wsz); *pbstr = ::SysAllocString(wsz); if (*pbstr == NULL) { status = FALSE; } free(wsz); return(status); }
//ANSI转换UTF8 char* ANSIToUTF8(const char* str) { if (NULL == str) { return NULL; } char* result = NULL; wchar_t* pUTF16 = ANSIToUnicode(str); if (pUTF16) { result = UnicodeToUTF8(pUTF16); free(pUTF16); pUTF16 = NULL; } return result; }
BOOL CDataBaseManager::UpdateOne(CGPRSBigMeter meter) { wstring strDevID = ANSIToUnicode(meter.GetDeviceID()); //开始事务 m_dbOracle.BeginTrans(); //实时数据 BOOL bResult = m_dbOracle.InsertRealMeterData(meter); if (!bResult) { m_dbOracle.RollbackTrans(); return FALSE; } //历史数据 int nRet = m_dbOracle.QueryRecordExist(strDevID, meter.GetBeforeDateString()); switch (nRet) { case -1: //出错了 m_dbOracle.RollbackTrans(); return FALSE; break; case 0: //新记录 if (!m_dbOracle.InsertMeterRecord(meter)) { m_dbOracle.RollbackTrans(); return FALSE; } break; default: if (!m_dbOracle.UpdateMeterRecord(meter)) { m_dbOracle.RollbackTrans(); return FALSE; } break; } //提交事务 return m_dbOracle.CommitTrans(); }
int ProcessWatch::FindHeavyProcess() { int processCount = GetProcessID(); for(int i=1; i<processCount; i++) { int cpu = GetProcessCpuUsage(m_vecProcessInfo[i].processID); //_tprintf(TEXT("%d, %d\n"), m_vecProcessInfo[i].processID, cpu); if(cpu>15) { char str[MAX_BUF_PATH] = {}; TCHAR tstr[MAX_BUF_PATH] = {}; sprintf_s(str, sizeof(str), "PID[%d] cpu usage more than limited value: %d %%, the path is %s \n", m_vecProcessInfo[i].processID, cpu, UnicodeToANSI(m_vecProcessInfo[i].processPath).c_str()); _tcscpy_s(tstr, ANSIToUnicode(string(str)).c_str()); WriteToLog(tstr); return m_vecProcessInfo[i].processID; } } return 0; }
/* this is a console application */ int main () { EXCEPINFO excepinfo; unsigned int argerr; SAFEARRAY *psa; DISPID dispid; OLECHAR *name; VARIANT varResult; VARIANTARG varg, varga[2]; BSTR bstrIn; IDispatch *pIDispatch = NULL; int status = 0; HRESULT hr; printf("dspdisp - DADiSP IDispatch Test, Initializing...\n"); hr = OleInitialize(NULL); if (FAILED(hr)) { trace("Failed to OleInitialize"); return(1); } // Get the CLSID for the application. wchar_t progid[] = L"DADiSP.Application"; CLSID clsid; hr = ::CLSIDFromProgID(progid, &clsid); if(FAILED(hr)) { trace("Failed to CLSIDFromProgID"); status = 1; goto exitpt; } // start DADiSP as an automation server hr = ::CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pIDispatch); if (FAILED(hr)) { trace("CoCreateInstance Failed"); status = 1; goto exitpt; } trace("CoCreateInstance Succeeded."); // --------------------------- // dadisp.getdata("version") // --------------------------- // First we need to get the ID for the function name ANSIToUnicode("GetData", &name); hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid); if (FAILED(hr)) { trace("Query GetIDsOfNames Failed"); status = 1; goto exitpt; } trace("\ndadisp.getdata(\"version\")"); // Convert the wide-character string to a BSTR. CstrToBstr("version", &bstrIn); // Build up the parameters for the invoke call. // Allocate and initialize a VARIANT argument. ::VariantInit(&varg); // Initialize the VARIANT. V_VT(&varg) = VT_BSTR; // Type of VARIANT data V_BSTR(&varg) = bstrIn; // Data for the VARIANT // Fill in the DISPPARAMS structure. DISPPARAMS param; param.cArgs = 1; // Number of arguments param.rgvarg = &varg; // Arguments param.cNamedArgs = 0; // Number of named args param.rgdispidNamedArgs = NULL; // Named arguments // Allocate a variant for the returned parameter. ::VariantInit(&varResult); // Invoke the function. hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &varResult, &excepinfo, &argerr); if (FAILED(hr)) { trace("Invoke Failed"); ShowException(name, hr, &excepinfo, argerr); status = 1; goto exitpt; } // Display the returned value DisplayVariant(&varResult); // ------------------------------------ // dadisp.getdata("max(gnorm(100,1))") // ------------------------------------ ::SysFreeString(bstrIn); CstrToBstr("max(gnorm(100,1))", &bstrIn); // Build up the parameters for the invoke call. // Allocate and initialize a VARIANT argument. ::VariantInit(&varg); // Initialize the VARIANT. V_VT(&varg) = VT_BSTR; // Type of VARIANT data V_BSTR(&varg) = bstrIn; // Data for the VARIANT // Fill in the DISPPARAMS structure. param.cArgs = 1; // Number of arguments param.rgvarg = &varg; // Arguments param.cNamedArgs = 0; // Number of named args param.rgdispidNamedArgs = NULL; // Named arguments // Allocate a variant for the returned parameter. ::VariantInit(&varResult); trace("\ndadisp.getdata(\"max(gnorm(100,1))\")"); // Invoke the function. hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &varResult, &excepinfo, &argerr); if (FAILED(hr)) { trace("Invoke Failed"); ShowException(name, hr, &excepinfo, argerr); status = 1; goto exitpt; } // Display the returned value DisplayVariant(&varResult); // ------------------------------------- // dadisp.putdata("MyVar", RandomArray) // ------------------------------------- free(name); ANSIToUnicode("Putdata", &name); hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid); if (FAILED(hr)) { trace("Query GetIDsOfNames Failed"); status = 1; goto exitpt; } // create a random array CreateRandomArray(darray, ARRAY_SIZE); // convert to automation SafeArray psa = DarrayToSafeArray(darray, ARRAY_SIZE, 1); ::SysFreeString(bstrIn); CstrToBstr("MyVar", &bstrIn); // Allocate and initialize a VARIANT argument. // This routine has two arguments, must add in *reverse* order ::VariantInit(&varga[1]); // Initialize the VARIANT. V_VT(&(varga[1])) = VT_BSTR; // DADiSP variable name V_BSTR(&(varga[1])) = bstrIn; // Data for the VARIANT ::VariantInit(&varga[0]); // Initialize the VARIANT. V_VT(&(varga[0])) = VT_ARRAY|VT_R8; // Array of doubles V_ARRAY(&(varga[0])) = psa; // Data for the VARIANT // Fill in the DISPPARAMS structure. param.cArgs = 2; // Number of arguments param.rgvarg = varga; // Arguments param.cNamedArgs = 0; // Number of named args param.rgdispidNamedArgs = NULL; // Named arguments // Allocate a variant for the returned parameter. ::VariantInit(&varResult); // Invoke the function. hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &varResult, &excepinfo, &argerr); if (FAILED(hr)) { trace("Invoke Failed"); ShowException(name, hr, &excepinfo, argerr); status = 1; goto exitpt; } // Display the input array trace("\nRandom Input Array:"); DisplayVariant(&varga[0]); // --------------------------------- // dadisp.getdata("fft(MyVar)") // --------------------------------- free(name); ANSIToUnicode("Getdata", &name); hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid); if (FAILED(hr)) { trace("Query GetIDsOfNames Failed"); status = 1; goto exitpt; } ::SysFreeString(bstrIn); CstrToBstr("fft(MyVar)", &bstrIn); // Allocate and initialize a VARIANT argument. ::VariantInit(&varg); // Initialize the VARIANT. V_VT(&varg) = VT_BSTR; // Type of VARIANT data V_BSTR(&varg) = bstrIn; // Data for the VARIANT // Fill in the DISPPARAMS structure. param.cArgs = 1; // Number of arguments param.rgvarg = &varg; // Arguments param.cNamedArgs = 0; // Number of named args param.rgdispidNamedArgs = NULL; // Named arguments // Allocate a variant for the returned parameter. ::VariantInit(&varResult); // Invoke the function. hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, ¶m, &varResult, &excepinfo, &argerr); if (FAILED(hr)) { trace("Invoke Failed"); ShowException(name, hr, &excepinfo, argerr); status = 1; goto exitpt; } // Display the returned array trace("\nFFT Output Array:"); DisplayVariant(&varResult); exitpt: // Release the dispatch interface. if (pIDispatch) pIDispatch->Release(); // Uninitialize the OLE library. OleUninitialize(); return(0); }
/*------------------------------------------------------------------------ * doTCP - handle a TCP service connection request *------------------------------------------------------------------------ */ void doTCPFTP(SOCKET s) { PER_HANDLE_DATA * PerHandleData = (LPPER_HANDLE_DATA)GlobalAlloc(GPTR, sizeof(PER_HANDLE_DATA)); // 在堆中为这个PerHandleData申请指定大小的内存 ZeroMemory(PerHandleData, sizeof(PER_HANDLE_DATA)); LPPER_IO_OPERATION_DATA PerIoData = (LPPER_IO_OPERATION_DATA)GlobalAlloc(GPTR, sizeof(PER_IO_OPERATEION_DATA)); ZeroMemory(PerIoData, sizeof(PER_IO_OPERATEION_DATA)); PerHandleData->socket = s; _tcscpy_s(PerHandleData->strCurrentWorkPath, _TEXT(DEFAULT_WORKPATH)); int zero = 0; if (setsockopt(PerHandleData->socket, SOL_SOCKET, SO_SNDBUF, (char *)&zero, sizeof(zero)) == SOCKET_ERROR) { printf("Set socket option Error %d", WSAGetLastError()); } zero = 0; if (setsockopt(PerHandleData->socket, SOL_SOCKET, SO_RCVBUF, (char *)&zero, sizeof(zero)) == SOCKET_ERROR) { printf("Set socket option Error %d", WSAGetLastError()); } char recvBuf[RECV_BUFFER_SIZE]; memset((void *)recvBuf, 0, sizeof(recvBuf)); if (recv(s, recvBuf, RECV_BUFFER_SIZE, 0) == -1) { cout << "At first, recv error." << endl; exit(-1); } cout << "A Client enter in, says: " << recvBuf << endl; // Begin to deal with ftp command while (true) { memset((void *)recvBuf, 0, sizeof(recvBuf)); int recvConn = -1; if ((recvConn = recv(s, recvBuf, RECV_BUFFER_SIZE, 0)) < 0) continue; if (strcmp(recvBuf, "quit") == 0) break; strncpy_s(PerIoData->cmdBuffer, recvBuf, strlen(recvBuf) + 1); cout << "A Client says: " << recvBuf << endl; if (strncmp(recvBuf, "get ", 4) == 0) { // At first, judge the file is exist or not. or this file is a dir ? char *p = recvBuf + 4; while (*p == '\t' || *p == ' ') *p++; TCHAR *subFilename = ANSIToUnicode(PerIoData->cmdBuffer) + (p - recvBuf); int dirOrFileExistedFlag = issubFileOrDir(PerHandleData->strCurrentWorkPath, subFilename); // this sub string is a dir. 1: a dir, -1: not exist, 2: a file. if (dirOrFileExistedFlag != 2) { if (send(PerHandleData->socket, (const char *)&dirOrFileExistedFlag, sizeof(int), 0) < 0) { cout << "File attribute send error.\n"; closesocket(PerHandleData->socket); exit(-1); } continue; } // if this is a dir. send a flag. int flag = ProcessGetCommand(PerHandleData, PerIoData); if (flag == 1) { cout << "This file is a dir, Please choose a file." << endl; } else if (flag == -1) { cout << "File send error.\n"; closesocket(s); exit(-1); } continue; } else if (strcmp(recvBuf, "ls") == 0) { memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer)); DWORD dwNumberOfDataSended = ProcessListCommand(PerHandleData, PerIoData); } else if (strncmp(recvBuf, "cd ", 3) == 0) { if (ProcessCdCommand(PerHandleData, PerIoData) == -1) { char tmp[88]; sprintf_s(tmp, "Dir[File] %s is not existed.\n", recvBuf + 3); memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer)); _tcsncpy_s(PerIoData->buffer, ANSIToUnicode(tmp), strlen(tmp) + 1); } } else if (strncmp(recvBuf, "pwd", 3) == 0) { TCHAR talk[200]; _tcscpy_s(talk, PerHandleData->strCurrentWorkPath); _tcscat_s(talk, L"\n"); _tcscpy_s(PerIoData->buffer, talk); } else { char talk[200]; sprintf_s(talk, "The client says: %s", recvBuf); _tcscpy_s(PerIoData->buffer, ANSIToUnicode(recvBuf)); } // cout << sizeof(PerIoData) << sizeof(PerIoData->buffer) << endl; // wcout << _tcslen(PerIoData->buffer) << endl; if (send(PerHandleData->socket, UnicodeToANSI(PerIoData->buffer), 2000, 0) < 0) { perror("[server] send error.\n"); closesocket(s); break; } // 判断此时客户端是否连接 } closesocket(s); }
char* ANSIToUTF8(const char* str) { return UnicodeToUTF8(ANSIToUnicode(str)); }
/////////// TEXTENTRY void MGUI_TextEntry::Paint(MGUI_Base *pBaseParent) { if(!pParent) return; if(pParent == pBaseParent) { if(((MGUI_Panel *)pBaseParent)->m_iClosing) return; // Draw Bg //MH_DrawTGAFunction2(g_mgui_tga_imebg,x+pParent->x,pParent->y+y,w,48,255); // Draw Text Fonts_SetSize(20,20); Fonts_SetColor(0,0,0,255); wchar_t pWchar[255]; Fonts_C2W(pWchar,255,m_pText); int iEnd=Fonts_Draw(pWchar,x+pParent->x+10,pParent->y+y+26,w,100); // Draw Line if(m_bHasFocus) { // Draw IME if(CandidateList) { if( g_bDrawIme) { Fonts_SetSize(20,20); if(CandidateList->dwCount>1) { int iLong = 0; for(int i=0; i < CandidateList->dwCount;i++) { char *pText = (char*)CandidateList + CandidateList->dwOffset[ i ] ; if(pText) { int iTemp = strlen(pText); if(iTemp>iLong) iLong = iTemp; } } // Draw INSIDE Fonts_SetColor(255,0,0,255); gEngfuncs.pfnFillRGBA(iEnd,pParent->y+y+26-20,iLong *10 + 20,24,135,135,135,255); iEnd = Fonts_Draw(ANSIToUnicode((char*)CandidateList + CandidateList->dwOffset[0]),iEnd,pParent->y+y+26,1000,100); // Draw LIST int iTotal = CandidateList->dwCount; gEngfuncs.pfnFillRGBA(iEnd-10,pParent->y+y - 24*CandidateList->dwCount,iLong*10+40,24*CandidateList->dwCount,40,40,40,255); // GetLongest for(int i=0; i < CandidateList->dwCount;i++) { char *pText = (char*)CandidateList + CandidateList->dwOffset[ i ] ; if(pText) { Fonts_SetColor(255,255,255,255); char Content[256]; sprintf(Content,"%d.%s",i+1,pText); Fonts_Draw(ANSIToUnicode(Content),iEnd,pParent->y+y - (iTotal-i)*24 +2+18,1000,100); } } } } } float fDelta = g_flTime; fDelta-=(int)fDelta; if(fDelta > 0.5) { Fonts_Draw(L"|",iEnd,pParent->y+y+26,w,100); } } } return; }