|
Hi, I work on my control. I have to use WinAPI (not MFC). I have problem that the control doesnt recieve focus input when I click on it. I checked with Spy++ and I saw that focus recieved the parent dialog and the mouse input my control. Do you know why the control doesnt recieve focus ???
Wizard_01
|
|
|
|
|
HEllo,
Step 1)
BEGIN_MESSAGE_MAP(CMYCLASS)
MESSAGE_HANDLER(OnFocus,WM_SETFOCUS)
.
.
END_MESSAGE_MAP
LRESULT OnFocus(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
or
Step *)
Just use SetFocus()
or
If you are not getting mosuse events and other focus, then you will have to use message map of NCHITTEST
BEGIN_MESSAGE_MAP(CMYCLASS)
MESSAGE_HANDLER(OnNChitTest,WM_NCHITTEST)
.
.
END_MESSAGE_MAP
LRESULT OnNChitTest(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT CMYCLASS::OnNChitTest(int idCtrl, LPNMHDR pnmh, BOOL& bHandled
{
return HTCLIENT;
}
thats all,
if you didnt solve the problem, send you code to me, I shall try to solve it,
cheers
Balkrishna Talele
|
|
|
|
|
Oh I must use only WinAPI(not MFC). Why WindowProc doesnt revieve WM_SETFOCUS(and key input) when I click in client area and revieve only mouse input ??
Wizard_01
|
|
|
|
|
See if you are Creating some static stuff or Something on Parebt window in SDK or ATL, WinProc will give you only parent focus and mouse event, so you need to explicitly tell him that i want child foucus, so you have to add NCHITTEST which is indeed not MFC stuff....
regards
Balkrishna Talele
"Ask until you dont get satisfaction!!!"
|
|
|
|
|
ok, control return HTCLIENT, but it still doesnt work :/
Wizard_01
|
|
|
|
|
Hello,
Simple and best, if your project is hobby project and not important for your company, just zip the code and send it to me....I shall try to find it out!!!
with the proper commented question WHAT n WHERE
regards
Balkrishna Talele
|
|
|
|
|
I thing that is not good idea It is in pascal. Do not ask why I use that when I have powerful and wonderful language as is C++ . But my teacher on high school dont think so! (((
Wizard_01
|
|
|
|
|
In your WindowProc for your control, handle the WM_LBUTTONDOWN (and/or WM_RBUTTONDOWN) message. Inside that message handler, call SetFocus, passing in the HWND of your control. There may be another way, but I'm not sure of it.
Chris Richardson
|
|
|
|
|
im having problem in crystal report 6 (using DB2 database).
the database was created by our DBA which makes him the owner of the database and tables as well (sample table: DBA.owners_name). i was given an account, PROG_I which gives me minimal authorization to the database (i have to run "set schema DBA" in VC to access/operation with the database). when im trying to print a report file in Crystal report, a message pop-up saying "PROG_I.owners_name" is undefined reference. does anyone give me an approach or technique?... thanks
|
|
|
|
|
Sounds like you will need to edit the report changing the PROG_I.column references to DBA.column references. As far as I know, there isn't a simple way to do this, although in CR7 and later I know you can modify these things at runtime from automation code.
Be much cleaner to edit the reports though.
Steve S
|
|
|
|
|
I am currently working on wrapping a third-party control into a MFC-based .dll. I have gotten used to properties in C# and was wondering if there were any design or implementation issues related to the use of the following within my class to mimic properties in C++.
private int m_Count;
int getCount()
{
return m_Count;
}
void setCount(int i)
{
m_Count = i;
}
__declspec( property( get=getCount, put=setCount ) ) int Count;
- Nick Parker My Blog
|
|
|
|
|
|
Cool, Something new i learned today
"When death smiles at you, only thing you can do is smile back at it" - Russel Crowe (Gladiator)
|
|
|
|
|
Hi All,
I'm looking for a regular expression parser that is fairly easy to use/implement in an MFC program. I've looked at the boost libraries regex++, but it seems like over kill for what I want. Any info is appreciated. Thanks.
- monrobot13
|
|
|
|
|
Here is the problem I am having:
UINT WorkerThread(LPVOID pParam)
{
while (1==1)
{
UpdateData();
//do something
UpdateData(false);
}
return 0;
}
void main()
{
AfxBeginThread(WorkerThread, (LPVOID)this, THREAD_PRIORITY_NORMAL);
}
The UpdateData() function does not work in the Worker Thread. I have researched this quite a bit, and apparantly others were having the same problem. However, no one was able to come up with a straight answer. Anyone know how to use UpdateData() in a worker thread? Any help is appreciated.
-Dev578
|
|
|
|
|
Update data to what ? is it of the dialog? is so where is the pointer to the dialog window ?
I hope i answered ur question with questions.
"When death smiles at you, only thing you can do is smile back at it" - Russel Crowe (Gladiator)
|
|
|
|
|
I wan't the worker thread to update the data of the dialog.
|
|
|
|
|
UINT WorkerThread(LPVOID pParam)
{
<code>CMyDialog *mydlg_ptr = (CMyDialog *)pParam;</code>
while (1==1)
{
<code>mydlg_ptr->UpdateData();</code>
<code>mydlg_ptr->UpdateData(false);</code>
}
return 0;
}
void main()
{
AfxBeginThread(WorkerThread, (LPVOID)this, THREAD_PRIORITY_NORMAL);
}
would that make any difference?
|
|
|
|
|
I have tried that already, causes an assertion failure
-Dev578
|
|
|
|
|
whoops, sorry,
void main()
{
AfxBeginThread(WorkerThread, this, THREAD_PRIORITY_NORMAL);
}
get rid of (LPVOID)
|
|
|
|
|
UINT WorkerThread(LPVOID pThis)
{
CMYClass *pThisObject = static_cast<CMyClass *>(pThis);
while (1==1)
{
pThisObject->UpdateData();//do something
ThisObject->UpdateData(false);
}
return 0;
}
void main()
{
AfxBeginThread(WorkerThread, reinterpret_cast<CMYclass*>(this), THREAD_PRIORITY_NORMAL);
}
AND DEFINITLY THIS SHOULD WORK!!!! I HAD TRIED A LOT OF TIMES...NO ASSTER OR NO ERROR WERE OCCURED!!!
cheers
Balkrishna Talele
|
|
|
|
|
|
Can you elaborate about the updatedata function ? I mean how u are using it, it obviously not a MFC code. You are not clear with the question.
"When death smiles at you, only thing you can do is smile back at it" - Russel Crowe (Gladiator)
|
|
|
|
|
What I am doing is writing my own scripting language in MFC. It is done in a text box, the program recognizes functions that the user types in the text box, and executes them accordingly. The user might type something that loops repeadedly, in which case it would have to be done in another thread, as to not interfear with the main dialog. I have a value variable on the text box that I am using for functions like find(), mid(), etc... It only works if it has UpdateData() before it and UpdateData(false) after it. This works completely fine when done in the main thread, but I am having problems doing it in a worker thread. I have tried doing what J.B. suggested, but it caused an assertion failure. Any way to do this?
-Dev578
|
|
|
|
|
Did ya check what caused the assertion? Like is it because of invalid m_hWnd, You can do so by clicking on retry at the assertion box. It will take you to the line that caused the assertion.
Assertion is mostly called due to null pointers in MFC.
Thread will start doing its job the moment you created it in this case...
So it is calling update even before the window is created.
Instead in the thread do the following check
if(!::IsWindow(pDlg->m_hWnd))
{
return 0;
}
"When death smiles at you, only thing you can do is smile back at it" - Russel Crowe (Gladiator)
|
|
|
|