|
It depends on what you're doing. If you're drawing the line onto the screen in WM_PAINT, then you're not drawing on the image at all. You'd need to keep track of all lines, and draw them. If you're drawing onto a graphics object that contains the bitmap, then the lines should persist, unless you're reloading from disk for some reason, then you'd need to save first. It really depends on what the code looks like.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Here is a simple extract off the code::
private: System::Void viewPictureE_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
PaintProccesImage(e);
void frmPictureEdit::PaintProccesImage(PaintEventArgs^ e) //Paint of Picturebox
{
if (btnBlackLine->CheckState == CheckState::Checked && viewPictureE->Image ) //blue line
{
this->isDrawing = false;
this->graph = this->viewPictureE->CreateGraphics();
graph->Flush();
}
}
void frmPictureEdit::PaintMouseDown(MouseEventArgs^ e)
{
if (btnBlackLine->CheckState == CheckState::Checked) //black line
{
//viewPictureE->Refresh();
this->startX = e->X;
this->startY = e->Y;
this->endX = e->X;
this->endY = e->Y;
graph->DrawLine(Pens::Black, startX, startY, endX, endY);
this->isDrawing = true;
}
}
void frmPictureEdit::PaintMouseMove(MouseEventArgs^ e)
{
if (viewPictureE->Image && btnBlackLine->CheckState == CheckState::Checked)
{
if( !this->isDrawing )
return;
//viewPictureE->Refresh();
System::Drawing::Bitmap ^image1 = gcnew System::Drawing::Bitmap(this->viewPictureE->Image);
graph->DrawLine(Pens::Black, startX, startY, endX, endY);
//viewPictureE->Invalidate();
}
}
void frmPictureEdit::PaintMouseUp(MouseEventArgs^ e)
{
if (btnBlackLine->CheckState == CheckState::Checked)
{
endX = e->X;
endY = e->Y;
graph->DrawLine(Pens::Black, startX, startY, endX, endY);
this->isDrawing = false;
}
}
The Image is loaded into an Picturebox. I created a new instance of the graphics and Bitmap object!Im basically drawing it on the graphics objects.
Can you please tell me exactly where Im going wrong???
Will be really appreciated!!
ArianN
|
|
|
|
|
If you're drawing to a bitmap, you should use Graphics.FromBitmap at the point that you want to draw, you should not store a graphics object. Then, I have no idea if drawing onto a bitmap in a picturecontrol forces the control to update itself. You'd do better to just have a Bitmap in memory, draw it in your paint handler, then draw your lines and call Invalidate(), or keep the details of the lines in an array and draw them over the image in your paint handler.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Thank you.. I will try that out, and will update you on the result!
|
|
|
|
|
HI Christian,
I gave it a shot however its not drawing multiple lines on Image. I tried Graphics.fromBitmap. I also called the Invalidate() but it doesnt even let me draw one line!!!
Can you please be more specific, its my first time with Managed C++ and Graphics?????
Thanks
|
|
|
|
|
I'm using C++/CLI for .NET development, but i would like to share the enums and structs with the other .NET languages.
Some sample C++/CLI code:
<br />
ref struct myStruct<br />
{<br />
int x;<br />
}<br />
<br />
void myFunc (myStruct ^obj);<br />
If i want to call myFunc from C# and VB.NET, do i have to declare the struct in those languages too?
As far as i understand it if i have an "interface class" the definition is taken from the IL. Is this also true for enums and structs?
Thanks
André
|
|
|
|
|
You can share enums and structs with the other .NET languages. However, you must make them public.
public ref struct myStruct
{
int x;
}
In regards to "void myFunc (myStruct ^obj);", other .NET languages can not access functions unless they are methods in a class or struct.
-- modified at 19:22 Tuesday 21st February, 2006
|
|
|
|
|
I need to develop a software the uses SMBIOS specification. This software must reads/writes the information stored in DMI pool area and must run on MS-DOS. How can I do this using C/C++?
|
|
|
|
|
I don't believe any .NET language will run in MS-DOS.
|
|
|
|
|
Hi,
How Can I read and write BIOS settings using C/C++? I need to develop a application that run in MS-DOS platform.
Thanks alot,
Helio
|
|
|
|
|
Again, I don't believe any .NET language will run under MS-DOS. You will need to write it in native C or C++.
-- modified at 19:24 Wednesday 22nd February, 2006
|
|
|
|
|
Hi,
I need to develop a application that modifies fields of the Type 00 ( BIOS Information ) on DMI configuration. The development must be done using the language C and must run on MS-DOS platform.
Does exist some header for this?
Any help is welcome!
Grateful,
Hélio
|
|
|
|
|
You are in the C++/CLI discussion board. We don't deal with C here!
|
|
|
|
|
Hi,
I imported in my VC++ .Net solution a c source code (for example "MyFile.c" & "MyFile.h"),
"MyFile.h" contains declarations of my types, external declation of my variables and funcitions,
I include "MyFile.h" in "Form1.h" witch is the header file of my design form.
typedef enum<br />
{<br />
Lundi = 0,<br />
Mardi,<br />
Mercredi,<br />
Jeudi<br />
<br />
}tenuTest;
extern tenuTest enuTest;
void vidTestAcces(void)<br />
{<br />
enuTest = Lundi;
}
The probleme is : the variable of type enumeration are not accessible and not visible.
Question : Shall I modify in project properties to adapt my imported c files? What modification shall I do?
Thank you.
|
|
|
|
|
Sorry, this should be addressed in the Visual C++ discussion board. This board deals with the managed version of C++, C++/CLI or Managed C++.
By the way, tenuTest != enuTest.
|
|
|
|
|
i am making project in my college of inventory management and want to print invoice detail screen through c++ and we are not allow to use vc++ and if you have any inventory or other project then send me i am not know much graphics in c++ and know progrmming and i have to use only c/c++ in my project
m s nagar
|
|
|
|
|
This is the C++/CLI forum. Please post your question in the appropriate forum.
|
|
|
|
|
I am writting a database managment application. Everything is pretty much coded up and the last thing I am having difficulties with is the printing. I have read on MSDN that I should use the combination of printdialog and print document. The print document should describe the data that needs to be printed. That's where the problem resides. What is the printDocument expecting- formName, a list of members on the form, or something else???
While trying to get that going I have come across some other code which I manually had to enter the coordinates of data items that need to be printed to the screen. I dislike that method as it involves assigning static locations of printing items, and can sometimes overwrite text over other text.. The whole approach is very messy. If I stick wiht this approach I will need info on how to start a new printing page.
Is there anyone on here that can show me how to get the printing of my forms to be automated, dynamic, something like WYSIWYG.
Thanks in advance,
Arian
-- modified at 21:39 Monday 20th February, 2006
|
|
|
|
|
Im trying to develop authentication daemon using CRAM-MD5(MYSQL).Honestly,im not a good programer.Its just a assignment given to me.Is there any good soul,who can help me with any stuff like tutorials,sample code,tips,libraries to use etc.
Thanks in Advance
Blessed
|
|
|
|
|
I need the source code to design and implement a simple multi-threaded server to concurrently process multiple client requests using the Solaris pthread library as part of course work for my university. The server must support concurrent operation since many independent clients can simultaneously send requests to the server. I am to use thread pools, shared buffer, client threads, dispatcher threads and worker threads as part of the software components for the server. I don't know anyone who knows much about this . Any help on obtaining the source code will be very much appreciated. Thank You
|
|
|
|
|
Hi All,
I need to implement this,
typedef struct
{
T1 m;
T2 m;
T3 m;
........
}XX;
XX a;
....
note T1,T2,T3... has no basic class, I hope
a function can auto visit the data member one by one like this
for(int pos=0; pos
|
|
|
|
|
I don't know what you want but here is my answer:
template<typename T, int INDEX>
struct XX
{
T m[INDEX];
};
Also, this post belongs in the Visual C++ forum.
-- modified at 12:16 Sunday 19th February, 2006
|
|
|
|
|
Since you placed your posted problem here, you get a C++/CLI answer:
using namespace System;
using namespace System::Reflection;
public ref struct Record
{
String ^ name;
int age;
};
int main(array<System::String ^> ^args)
{
Record ^ rec = gcnew Record;
rec->name = "George Washington";
rec->age = 274;
array<FieldInfo ^> ^ fieldInfo;
Type ^ recordType = Record::typeid;
fieldInfo = recordType->GetFields(
static_cast<BindingFlags>(
BindingFlags::Public | BindingFlags::Instance));
for (int i = 0; i < fieldInfo->Length; ++i)
{
Console::WriteLine("{0} = {1}",
fieldInfo[i]->Name,
fieldInfo[i]->GetValue(rec));
}
return 0;
}
-- modified at 13:34 Sunday 19th February, 2006
|
|
|
|
|
Hi!
I'm currently trying to get a program working that's supposed to display only a message
meaning without a window.
I've retrieved from various locations source code for this but every time there's
at least one error in the compile.
I'm using Borland C++ 5.5 as my compiler in a DOS-environment.
This is the source of the code that isn't working:
<br />
msgonly.cpp:<br />
<br />
#include <windows.h><br />
<br />
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);<br />
<br />
int APIENTRY WinMain(HINSTANCE hInstance,<br />
HINSTANCE hPrevInstance,<br />
LPSTR lpCmdLine,<br />
int nCmdShow)<br />
{<br />
MSG msg;
WNDCLASSEX wcx;
<br />
ZeroMemory(&wcx,sizeof(WNDCLASSEX));<br />
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.style = NULL;<br />
wcx.lpfnWndProc = (WNDPROC)MainWndProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = NULL;
wcx.hCursor = NULL; <br />
wcx.hbrBackground = NULL;<br />
wcx.lpszMenuName = NULL;
wcx.lpszClassName = "MessageOnly";
wcx.hIconSm = NULL;
<br />
if (!RegisterClassEx(&wcx))<br />
return 0;<br />
<br />
hwndMain = CreateWindowEx(WS_EX_LEFT, <br />
"MessageOnly",
NULL,
0,
0,
0,
0,
0,
HWND_MESSAGE,
0,
hInstance,<br />
0);<br />
<br />
if (!hwndMain)<br />
return 0;<br />
<br />
ShowWindow(hwndMain,SW_SHOW);<br />
while (GetMessage(&msg,NULL,0,0))<br />
{<br />
TranslateMessage(&msg);<br />
DispatchMessage(&msg);<br />
}<br />
<br />
return 0;<br />
}<br />
<br />
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)<br />
{<br />
switch (msg)<br />
{<br />
case WM_DESTROY:<br />
PostQuitMessage(0);<br />
break;<br />
default:<br />
return DefWindowProc(hwnd,msg,wParam,lParam);<br />
}<br />
return 0;<br />
}<br />
This is the error I get:
<br />
Error E2451 msgonly.cpp 33: Undefined symbol 'hwndMain' in function __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int)<br />
Can anyone help me with this?
Thanks!
|
|
|
|
|
Hmmm... the include's supposed to be
<br />
#include < windows . h ><br />
I don't know why it never displays this kind of thing...
|
|
|
|
|