|
Cool, that's nice to know because I do rotate the drawing. Using information gleened from Nishant Sivakumar code project article "Managed C++ and Windows Forms" I created a function in the Form1 class as follows...
protected: virtual void OnPaint(PaintEventArgs^ e) override
{
Graphics^ graphics = e->Graphics;
DisplayWaferMap(graphics);
}
And this seems to work the way you would want it, but there is another problem that may have a simple if statement check solution. The way I had this was that when the File->Open was invoked, a file was selected and the Wafer^ object instansiated acording to information in the file. Because 'DisplayWaferMap' uses the Wafer^ object the application dies because the Wafer^ object does not exist yet. Is there a method that will tell me if an object exists? Or should I instanciate the Wafer^ object in the Form1 constructor and set a variable myself (seems easy enough)? On the display speed issue I think I have a guess as to what is going between MFC and this. With MFC I beleive that I was painting the entire display (internally) and then issuing an Update() command that would then physically paint the screen. With the CLI code that I have, if the screen is physically repainted with each Graphics->DrawString() command then that's a huge number of physical repaints comapred to just one after all the information has been changed.
Buck
|
|
|
|
|
Hi Buck,
if (part of) your drawing is not available, your OnPaint should not even attempt to draw it;
the normal approach is having some test: if wafer were an object, it would initially be
null, so do a null test in OnPaint to skip it when wafer is not yet, or no longer, valid.
Basically what I am saying is: OnPaint should draw everything that is present in
your virtual drawing, that could be an arbitrary collection of items, it's completely up
to you.
BuckBrown wrote: if the screen is physically repainted with each Graphics->DrawString() command
it is not, this line belongs inside OnPaint, and it does not cause a new execution of
OnPaint.
If for some reason you would be repainting the same (or slightly changed) wafer, and
want the disturbance/flicker/whatever to be minimal, you may choose to make the
control you are drawing on (Panel, Form, whatever) be doublebuffered; there is a property
for that, it entails a hidden bitmap that gets drawn upon, then blitted onto the screen.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
hello,
I have two String format of date time and would transform it in a datetime format and I would to do a substraction of this 2 datetime
can you help me,
thanks you,
aef
|
|
|
|
|
Hi,
The DateTime type has a Parse() method and a Subtract() method.
I fail to see a problem. It is all well documented in MSDN.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/AllLanguages/General
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
hi
i'm new at c++ and i have very simple question for you
"double(*)[2]" This code has defined in a function,can you explain me what does it mean ?
asdasd
|
|
|
|
|
This forum is for managed C++ question. Post this question in VC++[^] forum instead.
Prasad
MS MVP - VC++
|
|
|
|
|
Hello,
I want to program with matrix of String can you give me a syntax of this declaration
Thanks,
aef
|
|
|
|
|
array<String^, [your desired dimension here]>^ yourVariableName;
Replace [your desired dimension here] with an integer between 1 and 32 inclusive.
|
|
|
|
|
hello,
I try with this but it gives error,
and I tryed this
cli::array <string ^="" ,="" 2=""> ^ ListCapt = gcnew cli::array<string ^="" ,2=""> (100000,16);
but it gives 4 error;
but when I do this :
[code]
array < array < String ^ > ^ > ^ ListCapt= gcnew array < array < String ^ > ^ >(20);
cpt=117
for(int i=0;i<cpt;i++)
for="" (int="" j="0;j<15;j++)
" listcapt[i][j]="Convert::ToString(i+j);
[/code]
there" isn't="" error="" but="" in="" execution="" it="" give="" the="" exception
if="" you="" are="" an="" exemple="" me;
thanks
=""
<div="" class="ForumSig">aef
|
|
|
|
|
I just typed
array<String^,2>^ myMatrix = gcnew array<String^,2>( 100000, 16 ); into a C++/CLI project I'm working on right now and got no compilation error. I'm using VS2005 SP1. What errors are you getting?
|
|
|
|
|
|
|
This is a native struct:
struct BufferInfo
{
void* buffers[2];
} that gets passed to this native function:
bool CreateBuffers( BufferInfo* buffersInfo ); On return from this function the buffers member of buffersInfo points to the two halves of a double buffer, the size of which is known.
I'm trying to wrap the native code with C++/CLI. I cannot use array<Byte,2>^ to wrap void* buffers[2] because array<> is only for allocations in the CLR heap. Is there a way to wrap the native array and treat it like a managed one? Copying or marshaling the data in the buffers is not an option for performance reasons.
|
|
|
|
|
Hi,
in my experience it is best to allocate a managed array, get it pinned down
so the GC does not move it, fetch its pointer (IntPtr), then pass it on to the
native world; that way nothing needs being copied or marshaled.
I typically use an object of this class to support this process (it happens
to be C# code); the C# using statement makes sure it gets disposed of as soon
as appropriate:
public class LP_Pinner : IDisposable {
private static ILP_Environment env=LP_Environment.GetEnvironment();
private GCHandle handle;
private bool disposed;
private IntPtr ptr;
public LP_Pinner(object obj) {
handle=GCHandle.Alloc(obj, GCHandleType.Pinned);
ptr=handle.AddrOfPinnedObject();
}
~LP_Pinner() {
Dispose();
}
public void Dispose() {
if (!disposed) {
disposed=true;
handle.Free();
ptr=IntPtr.Zero;
}
}
public IntPtr Ptr {get {return ptr;}}
}
Hope this helps.
|
|
|
|
|
Unfortunately that is not an option. I have no control over the native code, which is an interface to an audio hardware driver that manages its own buffers.
|
|
|
|
|
I see no way you can have an unmanaged array being promoted to a managed one
without copying it all.
You can of course pass the pointer value from native to managed world, and use it
there as a pointer, using unsafe code (or whatever it is called in C++/CLI)
and pointer operations. But then it is not a managed object at all.
|
|
|
|
|
OK. Thanks for your input. I'm going to see if a managed class with a private void* member can use an indexed property to give access to the bytes in the buffer and not affect performance.
|
|
|
|
|
i am not able to implement tray icon for my dialog boxt..can u provide me with some code...here's my code or a dialog box now i want to make a tray icon for this..please provide help in coding for this...thanks
//---------------------------------------------------------------------------
LPSTR lpString;
HWND hWnd;
LRESULT CALLBACK DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
//---------------------------------------------------------------------------
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DLGFIRST),hWnd, reinterpret_cast(DlgProc));
return FALSE;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
TCHAR cPath[20];
TCHAR cUserName[20];
TCHAR cPassword[20];
switch(Msg)
{
case WM_INITDIALOG:
{
return TRUE;
}
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
size_t nLen;
GetDlgItemText(hWndDlg, IDC_EDIT1, cPath, 20);
nLen = strlen(cPath);
if (nLen == 0)
{
MessageBox(hWndDlg,"Please Enter SVN Path","Error",MB_ICONERROR);
break;
}
GetDlgItemText(hWndDlg, IDC_EDIT2, cUserName, 20);
nLen = strlen(cUserName);
if (nLen == 0)
{
MessageBox(hWndDlg,"Please Enter your user name","Error",MB_ICONERROR);
break;
}
GetDlgItemText(hWndDlg, IDC_EDIT3, cPassword, 20);
nLen = strlen(cPath);
if (nLen == 0)
{
MessageBox(hWndDlg,"Please Enter your Password ","Error",MB_ICONERROR);
break;
}
EndDialog(hWndDlg, 0);
std::ofstream file ("config.txt");
file << " SVN Path entered by user is -> "<<cpath <<="" std::endl;
file="" "="" svn="" user="" name="" entered="" by="" -="">" <<cusername <<="" std::endl;
file="" "="" svn="" password="" entered="" by="" user="" -="">"<
|
|
|
|
|
you are either trolling, or you are sufficiently illiterate to render any help we offer, useless.
This is Win32 code ( probably making you the last person on earth to use Win32 ), and over the past several days, you have ignored all comments directing you on the right place to ask these questions.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
|
Hi,
I am new to this forum.I am working as a developper in C programming and working in compiler validation project. I hope I will get good response from u people as soon as possible.
My question is :
I want what are the possible ways of writing codes using 'const' keyword. I have written some.I need few more.
Plz go thru and send me any other cases where we can use const keyword in C only not C++.
const int degrees = 360;
int const degrees1 = 180;
const float pi = 3.14;
const char quit = 'q';
int * const var1;
const int * var2;
int const * var3
const char * const Var4;
char const * const Var5;
void test1() const;
const int * test2(); /* function returns a adress that
could not be modified */
void test3(const int *i);
const int arr1[]={1,2,3,4,5,6,7};
char const *arr="coderzone";
|
|
|
|
|
This is the Managed C++ forum, C can never be managed, so your question is off topic. Try the visual c++ forum ( or google )
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
there is an infinite number of const constructs; try:
int const * const * const * const * const * const * const * const * const var;
|
|
|
|
|
Hi .
I'm new to C++ and i'm reading the " c++ , Primer Plus, 5th Edition " by Stephen Prata.
Page 85 , 86 , Universal Character Names :
Cout << " My Name Is \u Hex Hex Hex He ";
OR
cout << " My Name Is \U Hex Hex Hex Hex Hex Hex Hex Hex ";
is the format we use to show some Character ( like Ø ) from other languages. The problem is :
1. My compiler ( Dev c++ ) does'nt display Iso 10646 codes and i always get the same figure
when i run the program.
2. I don't know if i'm using the right Iso 10646 code charts ( which i find on net ).
i'm just confuse becouse i like to move on to some more complicated part og programming and i
got stuck in the beginning .
Thanks for your time .
|
|
|
|
|
mooncry wrote: i got stuck in the beginning
In the beginning there was EBCDIC; don't bother trying it ...
Then there was ASCII which got extended to ANSI. I expect all compilers to
handle that correctly.
Then there was Unicode, and Visual Studio handles that well, so try Visual Studio; the Express Editions are free. If VS has a Unicode problem, show us exact code.
Good luck!
|
|
|
|
|