|
Hi,
I'm in developing a large project with Visual C++ .NET.
I have several SDI applications and a set of dialogs shared between SDI application. I want to create a MFC Extension Dll that can be included most common dialogs of my project.
I've successfully created a .dll with test dialog but I've confused about invoking the dialog from SDI application. The problem is that invoked dialog is not modal for SDI application (I can switch between SDI application and invoked dialog). In additional, the invoked dialog has an button on taskbar. See picture dialog.gif[^]
My question is: How to invoke a "true" modal dialog from MFC Extension Dll ?
What settings must have this dialog to be invoked as "true" modal dialog (currently, the settings are default) ?
Yours sincerely,
Alex Bash
|
|
|
|
|
I need to explain what I do:
Step 1. I made MFC Extension DLL with Wizard
Step 2. I added to Extension DLL a new class CMyDialog derived from CDialog
Step 3. I added to Extension DLL a new GENERIC-class CExportData to export data & functions
Step 4: I added to CExportData function CallMyDialog():
void CExportData::CallMyDialog()
{
CMyDialog md;
md.DoModal();
};
Step 5: I made a call from SDI-application:
CExportData ex;
ex.CallMyDialog();
Step 6: I got the CMyDialog, but CMyDialog is not modal. I can switch between SDI application and CMyDialog,
What's wrong?
Yours sincerely,
Alex Bash
|
|
|
|
|
I am not "skilled" in Visual C++ programming but I am learning... 8-)
I installed BoundsChecker in Visual C++ 6.0 SP5 using WinME.
Every time I compile a program I obtain the same following error:
Resource leak: allocated by LoadLibraryA in dllinit.cpp (505), HANDLE: 0x7A880000
Location of Error DllMain dllinit.cpp 505
I do not know how to correct it.
Why this happens and how solve it?
Thanks.
Piccinano
|
|
|
|
|
Unfortunately quite a lot of the MFC code contains leaks which you cannot do anything about. Look at the call stack for each leak and if it occurs due to one of your own functions doing something, you should be able to fix it. If not, you will just have to ignore it. I think in boundschecker you can set it to ignore known MFC leaks etc. I havn;t got it installed on my PC at he moment, so I cannot point you directly to how to do that.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
|
i create the edit box and try to get the user input, but the user can only key in numerical value but cant input character set from keyboard. y izzit like that
|
|
|
|
|
Do you have switched on "Number" in the Edit boxes styles (in Resource Editor)? What you describe is exactly the behaviour of that style.
The "Number" style is completely useless: It does really only accept numbers, not a minus-sign and no decimal point.
(I hope the responsible Microsoft programmer gets spanked for this in regular intervals (at least weekly) )
My opinions may have changed, but not the fact that I am right.
|
|
|
|
|
yeah, i did, thks for the help
|
|
|
|
|
Hi,
I need to show a city map in my program with the ability to zoom in and out, mark locations, like street crossings, houses by using flags. I am searching for reusable components. Please help.
Thanks in advance.
B.
|
|
|
|
|
I want to download it at microsoft webpage ,but it appears
"...We will not be offering this DDK as a download on this Web site..."
where can I download it free?
Don't look at me in that way!
|
|
|
|
|
Does anyone know of a CVS plug-in for VisualStudio.NET? Cheers
|
|
|
|
|
hi,
I saw the API'S called ,while notepad or any window based application through one utility called API spy.Here I thought that the basic window that OS is painting/Drawing is through the GDI.But the list of Api's I got is not suffient to draw a window. It just shows me normal user done painting like TextOut\BitBlt..etc not the actual windows painting.
How the actual windowing system gets painted? I meant,It is using only a GDI or something else is also uner the Hood?
Vikram
|
|
|
|
|
It's been quite a while since I've looked at my old coding projects (nearly a year) and now trying to get it to work on Visual C++ rather than Linux/cygwin I find it doesn't quite work
I got stuck here. Vertex is a class that I've defined. The error for this code is list' : use of class template requires template argument list
void inline LeftEdge(list<Vertex>::const_iterator &itr, const list<Vertex> &list, const int dir)<br />
{<br />
switch(dir)<br />
{<br />
case -1:<br />
itr++;<br />
if (itr == list.end())<br />
itr = list.begin();<br />
break;<br />
case 1:<br />
if (itr == list.begin())<br />
itr = list.end();<br />
itr--;<br />
break;<br />
default: break;<br />
}<br />
}<br />
<br />
void inline RightEdge(list<Vertex>::const_iterator &itr, const list<Vertex> &list, const int dir)<br />
{<br />
if (dir == 1)<br />
LeftEdge(itr, list, -1);<br />
else LeftEdge(itr, list, 1);<br />
}
And this doesn't work either.
list<Vertex>::iterator erase[vertexList2D.size()];
Any help or insight would be greatly appreciated, thanks!
|
|
|
|
|
What about the fact that you have the list template datatype, and you are trying to name one of your variables list?
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
opps, I thought I used the <> formatting...instead of
list<Vertex>
it should be
list<Vertex>
I'm using the list template datatype and you're right I should've passed in the parameter list<Vertex> &vertexList2D like I have everywhere else rather than list<Vertex> &list
Now I have to figure out what I was trying to do with list<Vertex>::iterator erase[vertexList2D.size()];
|
|
|
|
|
I'm currently working on a project for college where we (our project group) attach a unit we built to the serial port and interact with it using software.
Everything works great... to a point...
We call WaitCommEvent() which sets our thread (we created) in a block state and when a character is sent (from our hardware unit through the serial port), the software processes it properly... HOWEVER.... my problem is that...
The ONLY thing that breaks the WaitCommEvent() is hardware interaction....
The main program (that spawns the thread running the WaitCommEvent) cannot kill the thread or somehow interrupt the wait event.
I'm only an amateur at this, and have gotten this far by getting lost in the MSDN libraries... but I'm stumped on this one...
Does anyone know any little tricks I can do or any way I can modify my code so I can lift the WaitCommEvent() suspend state using software interaction. Then allowing me to terminate the thread?
lead2gold
|
|
|
|
|
I would stay away from WaitCommEvent myself. In the past I have always configured my comm port such that when you do a WriteFile() it returns after all output characters have actually been sent and the receive returns immediately regards on whether any characters were read or not - you can then check the number of characters received. I do this in a loop with regular Sleep()s in it and a while (!bKillYourself) flag which can be set externally.
Somthing like this: (A quick hack of one of my projects)
DWORD dwNumBytesRead;
DWORD dwNumBytesWritten;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
m_hSerialPortHandle = CreateFile((LPCTSTR)m_csCommPortName,
GENERIC_READ | GENERIC_WRITE,
0,
&sa,
OPEN_EXISTING,
0,
0);
if (m_hSerialPortHandle != INVALID_HANDLE_VALUE)
{
m_bOpen = true;
if (!GetCommState(m_hSerialPortHandle, &m_DCB))
{
text = "Serial port DCB failure.";
::SendMessage(m_hwndParent, UWM_UC_STATUS, (LONG)(LPCTSTR)text, 0);
}
else
{
m_DCB.BaudRate = CBR_9600;
m_DCB.ByteSize = 8;
m_DCB.Parity = NOPARITY;
m_DCB.fParity = false;
m_DCB.StopBits = ONESTOPBIT;
m_DCB.fDtrControl = DTR_CONTROL_DISABLE;
m_DCB.fOutxCtsFlow = false;
m_DCB.fDsrSensitivity = false;
m_DCB.fTXContinueOnXoff = true;
m_DCB.fOutX = false;
m_DCB.fRtsControl = RTS_CONTROL_DISABLE;
m_DCB.fAbortOnError = false;
if (!SetCommState(m_hSerialPortHandle, &m_DCB))
{
text = "Serial port set com status failure.";
::SendMessage(m_hwndParent, UWM_UC_STATUS, (LONG)(LPCTSTR)text, 0);
}
if (!SetCommMask(m_hSerialPortHandle, EV_RXCHAR))
{
text = "Serial port set com mask failure.";
::SendMessage(m_hwndParent, UWM_UC_STATUS, (LONG)(LPCTSTR)text, 0);
}
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(m_hSerialPortHandle, &timeouts);
}
}
else
{
text = "Unable to open serial port \"" + m_csCommPortName + "\"";
::SendMessage(m_hwndParent, UWM_UC_STATUS, (LONG)(LPCTSTR)text, 0);
m_bThreadDead = true;
return;
}
while (!m_bKillThread)
{
ReadFile(m_hSerialPortHandle, szInputBuffer, 1, &dwNumBytesRead, NULL);
if (dwNumBytesRead == 1)
{
}
}
CloseHandle(m_hSerialPortHandle);
m_bOpen = false;
m_bThreadDead = true;
m_bKillThread = false;
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
Thanks!
I will try that immediately and post my success (hopefully) ...
The hardware unit we built is kinda dumb, it can only send characters not read (thus I won't be using the write function)... but i will take what you've posted and see if i can play with it to make it work for me.
Once again, thanks alot!
lead2gold
|
|
|
|
|
Like almost any file IO in Win32 WaitCommEvent() supports overlapped IO. This means that your call to executed asynchronously by the IOManager in background. You receive the results via the OVERLAPPED structure passed as last parameter.
Overlapped IO is discussed in detail in MSDN.
--
Daniel Lohmann
http://www.losoft.de
(Hey, this page is worth looking! You can find some free and handy NT tools there )
|
|
|
|
|
Yea, we tried that, I have no idea how Overlapped works even with the MSDN libraries. (we used them to get as far as we did)
it seems as though if WaitCommEvent() is spawned (with it's parameters existing within a class)
and then
ComSetEvent() is executed from another thread with it's parameters existing fromt he same class, it is suspended until WaitCommEvent is complete. Is this true?
lead2gold
|
|
|
|
|
Aehm, more or less.
Overlapped IO is a feature of the NT Executive (Kernel) and the Win32 API and not related to any classes. The IO Manager (a component of the Executive) executes IO request always asynchronously - if you don't use overlapped IO the calling thread is just blocked until the IO is completed. (In other words: Inside the kernel non-overlapped IO is simulated by using overlapped IO)
However, I am sure you that much interested in the technical details, but want to know how to use it
Overlapped IO is not difficult in general, but a lot of details have to be taken into account. If the information provided by MSDN is not enough, I'd recommend to buy a good book about Windows NT system programming, like Win32 System Programming by Johnson M. Hart. (Note: I haven't read it, but people told me that it's a quite good book).
Hope that helps!
--
Daniel Lohmann
http://www.losoft.de
(Hey, this page is worth looking! You can find some free and handy NT tools there )
|
|
|
|
|
Every little bit helps and thanks for your advice. I'll definatly look into such a purchase.
lead2gold
|
|
|
|
|
Hi all,
new to C++ programming. i am in HS and taking a C++ course right now. can you guys tell me where to find the "graphics.h" file? I don't have one on my computer. Also what exactly does this do?
Thanks
matt
Matt Millican
http://www.internetmill.com
|
|
|
|
|
Where did you find that you need graphics.h?
Is it a windows API function, a C++ libarary function, or even a reference out of a book?
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
Paul,
I found some sample code on the internet and it has a line in it that is calling graphics.h.
#include <graphics.h>
Thanks
Matt
Matt Millican
http://www.internetmill.com
|
|
|
|