|
Hi all,
In my application i m taking help of this article.
http://www.codeproject.com/KB/tree/CFolderTreeCtrl.aspx?msg=2674697#xx2674697xx[^]
Here no coding done for KeyDownFunction.
I want to perform same action as of LButtonDown of this project.
i m try my lavel best but i m not succeed so please help me for this.
And tell how can i perform same action on Space key down same as LButton down.
I m already ask this question to author of this article.
Thanks in advance.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
Can you use SendMessage API with WM_LBUTTONDOWN when the space key is pressed?
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
No sir,
PLease tell me how can i do this
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
And the reason for not being able to do so is...?
Is capturing a key down event a problem or sending the message?
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
_AnShUmAn_ wrote: And the reason for not being able to do so is...?
...too lazy ; or not smart enough
|
|
|
|
|
Hi all,
I've got a problem which I can't seem to solve on my own...
My programm is dialog based and multi-threaded and I create a new dialog with
m_pPlainText->Create (IDD_PLAINTEXT_DLG);
m_pPlainText->SetIcon (AfxGetApp ()->LoadIcon (IDR_MAINFRAME), FALSE);
m_pPlainText->ShowWindow (SW_SHOWMAXIMIZED);
The first time I open this dialog it works fine, but when I try to open it for again I get the error: "Debug Assertion Failed" in file "f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp"
The problem was followed back to this line of code in dlgcore.cpp
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
If the error is ignored the dialog is built correctly. I have no idea what the problem could be, the only thing I could find in the internet concerning this message was about custom controls, but I don't have one in my dialog.
I'd really appreciate any help that could lead me the right way.
|
|
|
|
|
What's the code at the point the assertion fails?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
sorry for answering so late, but I waited for the mail that someone posted an answer and just found it in my spam folder...
The assertion fails in the following line
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
I can still get into the function where it returns the pParentWnd->GetSafeHwnd() and when it returns to the line posted obove it fails on the next step. That is the strange thing. Sorry if I can't explain it so detailed but I hope you can understand what I mean.
Greetings
|
|
|
|
|
There's no ASSERT macros on that line.
I meant the actual line of code with the statement
with the assertion.
Without it, it's really hard to guess
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Stupid me, I finally found the ASSERT.
BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx,
int cy, UINT nFlags)
{
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
if (m_pCtrlSite == NULL)
return ::SetWindowPos(m_hWnd, pWndInsertAfter->GetSafeHwnd(),
x, y, cx, cy, nFlags);
else
return m_pCtrlSite->SetWindowPos(pWndInsertAfter, x, y, cx, cy, nFlags);
}
m_hWnd is NULL... Do you know what the reason could be?
Sorry for anwering so late again... Took some time to figure that out and I can't just keep on just looking for that thing all the time.
Greetings from Germany,
Armin
|
|
|
|
|
Member 3554668 wrote: Do you know what the reason could be?
The HWND associated with the CWnd-based object hasn't
been successfully created.
You could put a breakpoint at the Create() call and step into
the MFC code to see where it fails. For a dialog, it typically fails
if the dialog resource isn't found.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Now, that is what I did before, isn't it? I put a breakpoint at the Create function and ended at the lines i posted before. I can't get any deeper. If I make the next step the assertion already failed and visual studio sets a breakpoint at the assert.
I must admit that I don't yet understand all this HWND and CWnd stuff.
The strange thing is, that if I press ignore when the assertion failed the window is build just like the way it should and in release mode everything works perfectly. But I don't dare to just ignore the problem and keep on building my programm.
Armin
|
|
|
|
|
Member 3554668 wrote: Now, that is what I did before, isn't it?
Maybe, but now you're showing the assertion in SetWindowPos(), which
shouldn't be called until AFTER the window is created.
What does the call stack look like where the assertion
fails in CWnd::SetWindowPos()? i.e. Who's calling
SetWindowPos() before the HWND is valid?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hey Mark,
very good hint to look in the call stack window. Good news is, I know now where the problem is, bad news is that I don't have a clue yet how to solve it.
I overwrote the function OnSize to adjust the size of the rich edit controls on my dialog.
void CPlainText::OnSize(UINT nType, int cx, int cy)
{
static BOOL bResize = FALSE;
CResizingDialog::OnSize(nType, cx, cy);
RECT rectDlg;
GetClientRect(&rectDlg);
if (bResize)
{
if (m_bSynchronize)
{
m_ctlPlainText.SetWindowPos(NULL, 10, 140, (rectDlg.right/2)-20, rectDlg.bottom-180, SWP_NOZORDER );
m_ctlPlainText2.SetWindowPos(NULL, (rectDlg.right/2), 140, (rectDlg.right/2)-10, rectDlg.bottom-180,SWP_NOZORDER | SWP_SHOWWINDOW);
}
else
{
m_ctlPlainText.SetWindowPos(NULL, 10, 140, rectDlg.right-20, rectDlg.bottom-180, SWP_NOZORDER | SWP_SHOWWINDOW);
}
}
bResize = TRUE;
}
I noticed that the OnSize function gets called before the dialog is completly created and causes an causes this ASSERT to fail so I tried to solve it with the little workaround with the BOOL bResize. I don't know how I could forget that. I didn't think about that the static variable is still initialised after the dialog has been closed... Do you know a more elegant solution?
Thanks for all your help so far!
|
|
|
|
|
I'd be a little concerned about relying on just one WM_SIZE message
before the child control variables become valid.
I personally just check if the controls are valid, something like:
if (::IsWindow(m_ctlPlainText) && ::IsWindow(m_ctlPlainText2))
{
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
This works perfect.
Thank you very much!!! *Thumbs up*
Armin
|
|
|
|
|
Hi all,
How to convert the Binary data into Image file(*.bmp) in MFC 9.0.
I have binary data which is conversion of image save in one file. I have read the file(binary data) and convert the binary data again in image
please kindly advice me..
modified on Tuesday, August 12, 2008 8:04 AM
|
|
|
|
|
in your problem maybe you are lack of snippet or the declaration that is in either the header or the main itself. Kindly check it
|
|
|
|
|
I have here the code:
#include <iostream>
#include <string>
#include <stack>
#include <cctype>
#include <cassert>
using namespace std;
#include <sstream>
string infixTOposfix(string);
int evaluarRPN(string);
int main ()
{
string infix,
posfixWspaces,
dummy;
double result;
char repeat;
do {
cout << "\nPlease enter the expression in INFIX: ";
getline(cin,infix);
posfixWspaces = infixTOposfix(infix);
cout << "This is the expression in POSTFIX: " << posfixWspaces << endl;
result = evaluarRPN(posfixWspaces);
cout << "The expression after the evaluation: " << result;
cout << "\nDo you want to repeat? Enter 'y' ";
cin >> repeat;
getline(cin,dummy);
} while ( repeat == 'y');
system("PAUSE");
return 0;
}
string infixTOposfix(string exp)
{
char token,
topToken;
stack<char> opStack;
string postfixExp;
const string BLANK = " ";
for (int i = 0; i < exp.length(); i++)
{
token = exp[i];
switch(token)
{
case ' ' : break;
case '(' : opStack.push(token);
break;
case ')' : for (;; )
{
assert (!opStack.empty());
topToken = opStack.top();
opStack.pop();
if (topToken == '(') break;
postfixExp.append(BLANK + topToken);
}
break;
case '+' : case '-' :
case '*' : case '/': case'%':
for (;; )
{
if (opStack.empty() ||
opStack.top() == '(' ||
(token == '*' || token == '/' || token == '%') &&
(opStack.top() == '+' || opStack.top() == '-'))
{
opStack.push(token);
break;
}
else
{
topToken = opStack.top();
opStack.pop();
postfixExp.append(BLANK + topToken);
}
}
break;
default :
postfixExp.append(BLANK + token);
for(;; )
{
if ( !isalnum(exp[i+1]) ) break;
i++;
token = exp[i];
postfixExp.append(1, token);
}
}
}
for (;; )
{
if (opStack.empty()) break;
topToken = opStack.top();
opStack.pop();
if (topToken != '(')
{
postfixExp.append(BLANK + topToken);
}
else
{
cout << " *** Error in infix expression ***\n";
break;
}
}
return postfixExp;
}
int evaluarRPN(string posfijo)
{
stack<int> numStack;
int x,
y,
toInt;
string number;
for (int i = 0; i < posfijo.length(); i++ )
{
if ( isdigit(posfijo[i]) )
{
number = posfijo[i];
stringstream ss( number );
ss >> toInt;
numStack.push( toInt );
}
else if (posfijo[i] != ' ' )
{
y = numStack.top();
numStack.pop();
x = numStack.top();
numStack.pop();
if (posfijo[i] == '+')
numStack.push( x+y );
else if (posfijo[i] == '-')
numStack.push( x-y );
else if (posfijo[i] == '*')
numStack.push( x*y );
else
numStack.push( x/y );
}
}
return numStack.top();
}
the question here is: why do i get this result...
when I put 5-5 instead of 0 the result is 1
when I put 11*5 instead of 55... the result is 5
when I put 100+100 the result is 0 instead of 200
when I put 100/100 the result is an error message box... </int></char></sstream></cassert></cctype></stack></string></iostream>
modified on Tuesday, August 12, 2008 8:13 AM
|
|
|
|
|
1) have you read the posting guidelines ? your code is too huge, and not even formatted.
2) your thread title is not really presenting what the question will be about.
3), have you stepped into the debugger and inspect the variables states, step by step ?
|
|
|
|
|
actually I'm just a new member here today. sorry for violating the rules and uhmmm... I've already solved a part of it but it only works for one digit number only do you have any tip that can also work in more than 1 digit, a decimal value and exponents?
|
|
|
|
|
Maito Gai wrote: actually I'm just a new member here today
your account says you've been a member since Tuesday, March 04, 2008...
Maito Gai wrote: sorry for violating the rules
it's not too late to read them[^] at least...
So please edit your message consequently.
|
|
|
|
|
what I mean is this is my first time to post a thread. All before this time is to read the tutorials here... like reading online books.
|
|
|
|
|
that doesn't forbid you to follow the advices I've already been given you twice now
|
|
|
|
|