|
// This is the main DLL file.
#include "stdafx.h"
#include "Appa.h"
namespace Appa
{
int MyClass :: Add(int x, int y)
{
int k = x+y;
return k;
}
}
and abt dll in vs2005
just select new project
visual c++
CLR --> class library
in this way... and i also add referece of this proj in vb.net proj.
MyClass is my classs
and add is my main dll fuction
|
|
|
|
|
dalbhide bipin wrote: CLR --> class library
Isn't CLR managed C++ (I know nothing about managed C++ so I'm not sure). If yes, you'd better ask this forum[^]
|
|
|
|
|
Hi all,
I'm writing a program using VC++ 6.0. The program is send and receives messages - string - via serial port. I used Overlapped mode for the communication. The program does not know when the data will come. i.e. if there is a data coming from the serial port at any time, read it. I used MFC in this project, so where is the best place for ReadFile() so that it checks if there is any data coming from serial port?? Thanks in advance
What I learned is still a dot in the programming world
|
|
|
|
|
I also have the same problem to read the file from the serial port.
Regards,
Ram
|
|
|
|
|
Have a look at Joe Newcomer's article about a threaded solution to serial programming: clickety[^].
In the article Joe uses UI threads. I've developed my own with worker threads.
In addition to Joe's article you have to use ::SetCommState() in order to set baudrate and such. You should also set the timeouts for the read and write operations with ::SetCommTimeouts() . I usually set ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD to get a special behaviour where a read operation expires after ReadTotalTimeoutConstant ms even if nothing has been received. In my opinion a reasonable value for ReadTotalTimeoutConstant would be 50 ms.
Read more here:
::SetCommState()[^]
::SetCommTimeouts()[^]
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger Stoltz for help
I found a function that called all the time. I put the ReadFile() there. The function is DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam).
Right click on the dialog>Classwizard
from Messages Maps tab choose DefWindowProc under Messages. Add function then edit code .
|
|
|
|
|
|
How do I display the text in the status bar pane as right justified?
If I use the following code,
CDC* pDC = m_wndStatusBar.GetDC();
pDC->SetTextAlign(TA_RIGHT);
It's not working.
|
|
|
|
|
if you are manullay drawing in the status bar you can use DrawText() with style DT_RIGHT
nave
|
|
|
|
|
No.I am displaying the text in the status bar that was entered from a edit box in a dialog. The code for displaying the message is,
void CPerspectiveDoc::OnShowMsg(CCmdUI* pCmdUI)
{
char str1[150];
//int len = message.GetLength();
sprintf(str1, "%s",message.GetString());
CDC* pDC = m_wndStatusBar.GetDC();
pDC->SetTextAlign(TA_RIGHT);
pCmdUI->Enable(TRUE);
//m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_NORMAL,100);
pCmdUI->SetText((const char *)str1);
//m_wndStatusBar.SetPaneInfo(1, IDS_MESSAGE, SBPS_STRETCH, len);
}
ID for that edit box is, IDS_MESSAGE.
|
|
|
|
|
T.RATHA KRISHNAN wrote: pDC->SetTextAlign(TA_RIGHT);
This will not do.
I think you should owner draw the status bar.
nave
|
|
|
|
|
Why you dont use of manullay drawing ?
|
|
|
|
|
Hi
I would like to create a Login Screen that would mimic the Windows XP Welcome Screen. Typically my app would handle many users on a single machine. Therefore the Login screen should show several usernames with edit boxes for their passwords. When a user needs to login, she should be able to navigate through the list of usernames in the Screen just like in the Win XP Welcome Screen and select the required username and enter the password.
My que is, how do I animate the controls to mimic the Windows XP Welcome Screen and also what controls should I use ( CWnd / CDialog ) to best achieve this ?
thanx , expecting a quick reply.
Eraj.
|
|
|
|
|
There is nothing special about the welcome screen. It is just a full screen window with a few skinned controls.
In your case, it may be better to use a CDialog, that way you can run and destroy it before you main window appears. Look on CP for articles about skinning controls. If you want it to be fullscreen, make the dialog topmost, remove all borders, and adjust the size so that it fills the screen.
|
|
|
|
|
No no, my question is not regarding the Welcome Screen itself.
But rather the control with the Username and Password field together, which lightens up when not focused, and darkens when in focus.
In other words, Im only worried about creating the control for showing the Username and the Password field for each user, that would have a similar look and feel to that of the XP login. I jus want to animate the controls that way.
I would hold all these individual Username/Password combo controls in a CDialog.
Its jus the animation of the controls Im really worried about and have no clue of !
|
|
|
|
|
Like I said in my last reply, search CP for articles about skinning controls.
|
|
|
|
|
I want to set the widht of the first pane as 100. If I use the following code,
m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_STRETCH,100);
it gives me an exception. What should I use?
|
|
|
|
|
T.RATHA KRISHNAN wrote: m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_STRETCH,100);
If you want to width of first satus pane, it should be 0th index , isn't it ?
What exception it is throwing ? Have you tried debugging it ?
|
|
|
|
|
Unhandled exception at 0x7c1d71bb (MFC71.dll) in Perspective.exe: 0xC0000005: Access violation writing location 0x00000014.
If I break this, it goes to a class called
void CStatusBar::SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth)
{
ASSERT_VALID(this);
BOOL bChanged = FALSE;
AFX_STATUSPANE* pSBP = _GetPanePtr(nIndex);
pSBP->nID = nID;
if (pSBP->nStyle != nStyle)
{
if ((pSBP->nStyle ^ nStyle) & SBPS_STRETCH)
bChanged = TRUE;
else
{
pSBP->nStyle = nStyle;
pSBP->nFlags |= SBPF_UPDATE;
SetPaneText(nIndex, pSBP->strText);
}
pSBP->nStyle = nStyle;
}
if (cxWidth != pSBP->cxText)
{
// change width of one pane -> invalidate the entire status bar
pSBP->cxText = cxWidth;
bChanged = TRUE;
}
if (bChanged)
UpdateAllPanes(TRUE, FALSE);
}
What to do?
|
|
|
|
|
You have not answered my first question about index, have you passed 0th index ?
And where exactly it is crashing in above code? you are definitely using invalid pointer here.
|
|
|
|
|
Actually my requirement is to set width of the second pane only. I have told that first pane by mistake.
My initial statement,
m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_STRETCH,100);
is the right requirement only. If I use this code, I got the afore mentioned
exception.(refer last message by me).
|
|
|
|
|
Ok, At which line exactly, debugger is showing crash ?
I can run this code in sample SDI app, without any problem.
|
|
|
|
|
If I remove the comments from this line,
//m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_NORMAL,100); an exception occurs. If I break that exception, it goes to a file called barstat.cpp
void CStatusBar::SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth)
{
ASSERT_VALID(this);
BOOL bChanged = FALSE;
AFX_STATUSPANE* pSBP = _GetPanePtr(nIndex);
pSBP->nID = nID;
if (pSBP->nStyle != nStyle)
********{
if ((pSBP->nStyle ^ nStyle) & SBPS_STRETCH)
bChanged = TRUE;
else
{
pSBP->nStyle = nStyle;
pSBP->nFlags |= SBPF_UPDATE;
SetPaneText(nIndex, pSBP->strText);
}
pSBP->nStyle = nStyle;
}
if (cxWidth != pSBP->cxText)
{
// change width of one pane -> invalidate the entire status bar
pSBP->cxText = cxWidth;
bChanged = TRUE;
}
if (bChanged)
UpdateAllPanes(TRUE, FALSE);
}
The yellow pointer appears in the line where ******** is shown. What may be the problem?
-- modified at 1:27 Monday 12th February, 2007
|
|
|
|
|
T.RATHA KRISHNAN wrote: AFX_STATUSPANE* pSBP = _GetPanePtr(nIndex);
pSBP->nID = nID;
if (pSBP->nStyle != nStyle)
It may be beacuase, pSBP is NULL. Are you sure, there are two panes present in status bar ? Have you called this function after creating status bar ?
|
|
|
|
|
Yes, There are two status bar panes. I've called SetPaneInfo function after creating the Status Bar only. The code for displaying message in the status bar pane is,
void CPerspectiveDoc::OnShowMsg(CCmdUI* pCmdUI)
{
char str1[150];
//int len = message.GetLength();
sprintf(str1, "%s",message.GetString());
CDC* pDC = m_wndStatusBar.GetDC();
pDC->SetTextAlign(TA_RIGHT);
pCmdUI->Enable(TRUE);
//m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_NORMAL,100);
pCmdUI->SetText((const char *)str1);
//m_wndStatusBar.SetPaneInfo(1, IDS_MESSAGE, SBPS_STRETCH, len);
}
Here this line,
CDC* pDC = m_wndStatusBar.GetDC();
compiles without any problem.
This line also,
pDC->SetTextAlign(TA_RIGHT);
compiles without problem. But not displaying message right aligned.
If I remove commenting from this line,
//m_wndStatusBar.SetPaneInfo(1,IDS_MESSAGE,SBPS_NORMAL,100);
then only that exception occurs.
|
|
|
|