|
Hi all..
I have been searching for long time for encoding Arabic txt by UCS-2 I found this code in VB that give me the correct result when I tried to write such function in VC++ I keep having error in the part where the BYTE variable when I add the string value to it ..
this is the VB function :
Public Function ArabicHex(b() As Byte) As String
Dim s As String, h As String
Dim i As Integer
i = 0
s = ""
While i <= UBound(b)
h = Right("00" & Hex(b(i)), 2)
i = i + 1
h = Right("00" & Hex(b(i)), 2) & h
If h = "000D" Then h = ""
s = s & h
i = i + 1
Wend
ArabicHex = s
End Function
this is the VC++ function :
CString s,h1,h2,h,x;
x="A";
int i;
TBYTE *b;
b=x; /// here where I am getting the error
i=0;
s="";
int xlen=x.GetLength();
while (i < xlen*8)
{
h1.Format("%02x",b[i]);
i++;
h2.Format("%02x",b[i]);
if (h.Compare("000D"))
h=" ";
h=h1+h2;
s=s+h;
i++;
}
now .. i need some one to help me correct the error io the VC++ function
|
|
|
|
|
Try this:
b = (TBYTE*)x.GetBuffer(x.GetLength());
or
b = (TBYTE*)LPCTSTR(x);
Bikram
|
|
|
|
|
thanx .. i tried them and they remove the error ... but i stil unable to get the right valuse for arabic char
in VB the code i get for charater "ب" is 0628
while in VC++ function i get for thye same character 00C8
i change the VC++ like that :
-----------------------------------------------------------
CString s,h1,h2,h,x;
x="ب";
int i;
TBYTE *b;
b=(TBYTE*)x.GetBuffer(x.GetLength());
i=0;
s="";
int xlen=x.GetLength();
while (i <= xlen)
{
h1.Format("%02x",b[i]);
i++;
h2.Format("%02x",b[i]);
i++;
h=h2+h1;
s=s+h;
}
MessageBox(s);
----------------------------------------------------------
so any idea for this differen valuse i get ..?????????!!!!!!
|
|
|
|
|
Just a thought is UNICODE defined?
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
|
i have a working c++ program which clusters multidensional numeric data and intend to display the results in a VRML frame within my c++ any ideas?
|
|
|
|
|
While I have had some experience using VRML for data visualization, I find it helpful to use the program just to write the data into a VRML file and then use a separate browser to view it. The reason is that it makes sharing data with others much easier.
Dave
"You can say that again." -- Dept. of Redundancy Dept.
|
|
|
|
|
plz can any one help me how access the variable(cstring or int )which is intialized in the other class(dialog box). i am not able to do with the conventional method i,e creating a object and accessing the variable
Cdialog1 same; (where "Cdialog" is class and "same" is an object)
same.array1; (array1 is an varaible of object "same")
the above method is not working please can any one guide me....
|
|
|
|
|
Q: How is a variable of an object of class type accessed?
A: Make the variable public.
Dialog boxes in MFC programs are represented as classes, for example, CAboutDlg, CTestDlg, etc.
Just move that variable(s) to public section of the class definition.
Maxwell Chen
|
|
|
|
|
declare same as extern in the cpp file where u want to access its member,
then call like same.array1
It's not a bug, it's an undocumented feature. suhredayan@omniquad.com
messenger :suhredayan@hotmail.com
|
|
|
|
|
CDialog is an MFC class, you have to create your own Dialog (eg. LogonDialog) and derive this from CDialog.
You can create your array (preferably in the PRIVATE part) in this class, then you write a PUBLIC function which returns your array.
thus:
int[] LogonDialog::GetArray(){
return array;
}
this should get you on the move. (yes you can declare your array public, but this is no good incapsultation)
|
|
|
|
|
What Exactly is the difference between vc++ and vc++.net? Do you think .net is the wave of the future? What reasons are the to stay out of the whole tangled web of .net??
Anyone??
|
|
|
|
|
Just the product names.
As the TV commercials:
For example, Ford Mondeo, year(s) later, you see Ford Mondeo MetroStar;
Toyota Corolla, and year(s) later, there's Toyota All-New Corolla Altis;
Mitsubishi Lancer, and later the Mitsubishi Lancer Galant, Lancer Virage.
Maxwell Chen
|
|
|
|
|
VC++.NET is actually VC++ 7. It has a more conformance compiler, higher version STL, IDE and etc.
The .NET imply that the VC++.NET is capable of writing .NET gargage collector (gc in short) codes easily in C++ language . Using VC.NET, you can easily access the .NET assemblies functions and feature as though as it is part of language.
For more , check Microsoft VC.NET product site.
Sonork 100.41263:Anthony_Yio
Life is about experiencing ...
|
|
|
|
|
As I understand it, VC++.Net incorporates the idea of a common runtime library, the CLR, that is installed with the .Net Framework. This allows a developer to use whatever .Net-enabled language is most convenient for the task at hand to create a program that will be compatible with other pieces written in other languages. Previous versions of C++ made it difficult to use, for instance, a control developed in VB, because of differences in the internal implementations of variable types and procedures. In the .Net scenario, all languages utilize the same libraries, and modules written in any language are interoperable. In theory, you can bang out a GUI on VB, a language nicely suited for that task, and implement the computation-intensive parts of the program in VC++, without having to worry about type conversions and such to accomodate the different ways these are implemented in each language.
There are probably several other reasons to adopt the .Net approach, but my understanding is limited by my lack of experience with it. I'll leave it to others to elaborate...
Some people think of it as a six-pack; I consider it more of a support group.
|
|
|
|
|
I have set up the executable directory and it runs the new compiler.
But I get about 30 errors in my program that never showed up with the old compiler.
They appear to all arise from <code><afxtempl.h></code> (MFC 6).
I think it is to do with the new ISO conformance. I looked at the msdn library, and there are a few breaking changes todo with templates, but since im not very good with the technical error jargon, I don't have a clue what to do.
Could some look into it and tell me what i need to edit to get it to work?
I was really hoping I could save me a few $'s and just upgrade the compiler not the IDE, since all the new IDE features are mainly for .NET (which I don't care much about)
|
|
|
|
|
Edit: I have tried CalcDynamicLayout(80, LM_HORZ|LM_LENGTHY); inside CMainFrame::OnCreate after the bar has been created and no luck
How can I set the width or height of a CControlBar programmatically after it is created? The control bar when first created is large (very wide) and i'm not using SaveBarState or anything so each time program loads the control bar is huge???
I plan on eventually using LoadBarState, but how do I resize a control bar when application first run???
Thanks
Cheers
How do I print my voice mail?
|
|
|
|
|
CControlBar is a derived class from CWnd. You can apply any function related to CWnd on it.
|
|
|
|
|
I tried calling SetWindowPos, but it didn't work???
How do I print my voice mail?
|
|
|
|
|
Hi all, ibe been coding for over a year now, and ibe never actually stopped to think about this (duh).
if i need to define a constant value like a string, a number, etc. for my app
should i:
#define MY_STRING _T("this is a string")
#define MY_NUMBER 100
or:
const TCHAR* MY_STRING = _T("this is a string");
const int MY_NUMBER = 100;
and why?
needless to say, both approaches work fine, and most code ibe seen uses the #define approach, however, a book i have (Beginning Visual C++ by Ivor Horton) sais that i should use the "const" approach, and that the #define one is obsolete and should be avoided (doesnt mention why tho)
Thanks!
|
|
|
|
|
You should not consider to use #define to create a constant.
#define define a macro. That mean, it will be used by preprocessor. There is not type checking here. The identifier, that appear after define keyword, exists only during preprocessing.
const define a constant. That mean, it will be used by compiler. Therefore, compiler do alot base on that define.
|
|
|
|
|
1) Regarding to the very purpose in your question, the main difference is ~ scope. A define lasts its definition till the end of the compilation module; but a const literal only lives within its scope. For example, try to compile the code below:
void Foo()
{
#define MAX_SIZE 192
}
bool Bar()
{
#define MAX_SIZE 512 // Oops!
int iSize = MAX_SIZE;
}
When your program is very large with a lot of source files, and the define(s) hide somewhere very deep in some header file(s) included by the other header files, you would find it annoying, because it needs to undef and ......
2) There are some other reasons about avoiding macros (not related to your question). Please read Section 7.8 - Macro in the book The C++ Programming Language, 3rd by Stroustrup.
"Macros are very important in C but have far fewer uses in C++. The first rule about macros is: Don't use them unless you have to. Almost every macro demonstrates a flaw in the programming language, in the program, or in the programmer. Because they rearrange the program text before the compiler proper sees it, macros are also a major problem for many programming tools. ...... " ~ Stroustrup.
The section demonstrates many flaws!
Maxwell Chen
|
|
|
|
|
Good points, ill stick with const from now on.
Thanks
|
|
|
|
|
Be aware that const may allocate memory.
To say #define is obsolete is idiotic. It's a tool that is extremely useful. I prefer it not be used for strings, but on occasion it's the best solution for a problem.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
Ok this is a really dasic dialog program but I can't figure what I'm donig wrong?? The problem I am having is get the dialog title to change to the caption of the button pressed. Help!!
--------------------Configuration: Retry - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
Retry.cpp
c:\c++ projects\retry\retrydlg.h(18) : error C2061: syntax error : identifier 'UNIT'
c:\c++ projects\retry\retrydlg.h(19) : error C2146: syntax error : missing ';' before identifier 'm_nIDofLastButton'
c:\c++ projects\retry\retrydlg.h(19) : error C2501: 'UNIT' : missing storage-class or type specifiers
c:\c++ projects\retry\retrydlg.h(19) : error C2501: 'm_nIDofLastButton' : missing storage-class or type specifiers
RetryDlg.cpp
c:\c++ projects\retry\retrydlg.h(18) : error C2061: syntax error : identifier 'UNIT'
c:\c++ projects\retry\retrydlg.h(19) : error C2146: syntax error : missing ';' before identifier 'm_nIDofLastButton'
c:\c++ projects\retry\retrydlg.h(19) : error C2501: 'UNIT' : missing storage-class or type specifiers
c:\c++ projects\retry\retrydlg.h(19) : error C2501: 'm_nIDofLastButton' : missing storage-class or type specifiers
C:\C++ Projects\Retry\RetryDlg.cpp(208) : error C2660: 'ChangeDialogTitle' : function does not take 1 parameters
C:\C++ Projects\Retry\RetryDlg.cpp(213) : error C2660: 'ChangeDialogTitle' : function does not take 1 parameters
C:\C++ Projects\Retry\RetryDlg.cpp(218) : error C2660: 'ChangeDialogTitle' : function does not take 1 parameters
C:\C++ Projects\Retry\RetryDlg.cpp(221) : error C2065: 'UNIT' : undeclared identifier
C:\C++ Projects\Retry\RetryDlg.cpp(221) : error C2146: syntax error : missing ')' before identifier 'nID'
C:\C++ Projects\Retry\RetryDlg.cpp(221) : error C2182: 'ChangeDialogTitle' : illegal use of type 'void'
C:\C++ Projects\Retry\RetryDlg.cpp(221) : error C2350: 'CRetryDlg::ChangeDialogTitle' is not a static member
C:\C++ Projects\Retry\RetryDlg.cpp(221) : error C2059: syntax error : ')'
C:\C++ Projects\Retry\RetryDlg.cpp(222) : error C2143: syntax error : missing ';' before '{'
C:\C++ Projects\Retry\RetryDlg.cpp(222) : error C2447: missing function header (old-style formal list?)
Generating Code...
Error executing cl.exe.
Retry.exe - 18 error(s), 0 warning(s)
// RetryDlg.h : header file
//
#if !defined(AFX_RETRYDLG_H__4A3C71B3_E316_48A5_B38E_7F3E778D47DD__INCLUDED_)
#define AFX_RETRYDLG_H__4A3C71B3_E316_48A5_B38E_7F3E778D47DD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CRetryDlg dialog
class CRetryDlg : public CDialog
{
// Construction
public:
// Trouble Rigth Here Line 18
void ChangeDialogTitle(UNIT nID);
// Trouble Rigth Here Line 19
UNIT m_nIDofLastButton;
CRetryDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CRetryDlg)
enum { IDD = IDD_RETRY_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRetryDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CRetryDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnSh();
afx_msg void OnEd();
afx_msg void OnL();
afx_msg void OnC();
afx_msg void OnR();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_RETRYDLG_H__4A3C71B3_E316_48A5_B38E_7F3E778D47DD__INCLUDED_)
// RetryDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Retry.h"
#include "RetryDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
afx_msg void OnPlus();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_BN_CLICKED(IDC_Plus, OnPlus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRetryDlg dialog
CRetryDlg::CRetryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRetryDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRetryDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRetryDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRetryDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRetryDlg, CDialog)
//{{AFX_MSG_MAP(CRetryDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_SH, OnSh)
ON_BN_CLICKED(IDC_ED, OnEd)
ON_BN_CLICKED(IDC_L, OnL)
ON_BN_CLICKED(IDC_C, OnC)
ON_BN_CLICKED(IDC_R, OnR)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRetryDlg message handlers
BOOL CRetryDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CRetryDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CRetryDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CRetryDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CRetryDlg::OnSh()
{
BOOL bVisible = GetDlgItem(IDC_L) ->IsWindowVisible();
GetDlgItem(IDC_L) ->ShowWindow(bVisible? SW_HIDE : SW_SHOW);
GetDlgItem(IDC_C) ->ShowWindow(bVisible? SW_HIDE : SW_SHOW);
GetDlgItem(IDC_R) ->ShowWindow(bVisible? SW_HIDE : SW_SHOW);
GetDlgItem(IDC_SH) ->SetWindowText(bVisible? "SHOW" : "HIDE");
}
void CRetryDlg::OnEd()
{
BOOL bState = GetDlgItem(IDC_L) ->IsWindowEnabled();
GetDlgItem(IDC_L) ->EnableWindow(!bState);
GetDlgItem(IDC_C) ->EnableWindow(!bState);
GetDlgItem(IDC_R) ->EnableWindow(!bState);
GetDlgItem(IDC_ED) ->SetWindowText(bState? "ENABLE" : "DISABLE");
}
void CAboutDlg::OnPlus()
{
MessageBox ("Please Register Your Shareware", "!!!!!!");
}
void CRetryDlg::OnL()
{
ChangeDialogTitle(IDC_L);
}
void CRetryDlg::OnC()
{
ChangeDialogTitle(IDC_C);
}
void CRetryDlg::OnR()
{
ChangeDialogTitle(IDC_R);
}
void CRetryDlg::ChangeDialogTitle(UNIT nID)
{
CString strCaption;
GetDlgItem(nID) ->GetWindowText(strCaption);
strCaption += " was pressed";
if(m_nIDofLastButton == nID)
strCaption += " again";
SetWindowText(strCaption);
|
|
|
|
|