|
Do you want to get hwnd of a control on other programs?
|
|
|
|
|
ํYes,I want to inject text data to dictionary program when I copy text data to clipboard.
I use this function
::SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)pchData);
|
|
|
|
|
A small code(I suppose you run Notepad)
char *MY="Hello";
HWND hWnd = ::FindWindow("Notepad", NULL);
CWnd *hWndEdit=FindWindowEx(hWnd,NULL,"Edit",NULL);
hWndEdit->SendMessage(WM_SETTEXT,0,(long)MY);
with this code you insert Hello to notepad now if you want to read this text of NotePad first you must determine length in characters of window
LRESULT l=hWndEdit->SendMessage(WM_GETTEXTLENGTH,0,0);
then you can get text of notepad
hWndEdit->SendMessage(WM_GETTEXT,l+1,(long)MY2);
Is it helpfuls?
|
|
|
|
|
After I inject text to target Edit Ctrl I have to click on it and press enter key then the dictionary program will work.
So, I want to try to send the message that user press enter key after inject text to target Edit Ctrl.
What this message is?
|
|
|
|
|
|
Well , i have put the control dynamically but each time when i add new item in the list view from the fileopen dialog it's place the control(progress bar) at the same postion and when i select entire row of the listview it goes disapper and goes behind selection(might not seen).
so i need to display the progressbar in such a way that when i add an item in the list view it will show with subitem in the listview.
and when event fired it shows the progress bar in the progress mode.
i am using win32 API on .net 2005. OS SERVER 2003.
i have seen some demos but they are realted with MFC.
Thank you
AMIT
|
|
|
|
|
i try to start another thread with this code
CGLMFCDlg * MyThread= new CGLMFCDlg;
_beginthread(MyThread->Thread, 0,NULL);
delete MyThread;
the new thread is a void function, i get a error message as follows:
error C3867: 'CGLMFCDlg::Thread': function call missing argument list; use '&CGLMFCDlg::Thread' to create a pointer to member
Any sugestions on how i can solve this?
thanks
|
|
|
|
|
For an address of a member function the compiler is expecting you to use the address-of
operator:
_beginthread(&MyThread::Thread, 0,NULL);
|
|
|
|
|
that gives me an error like this error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__thiscall CGLMFCDlg::* )(void)' to 'void (__cdecl *)(void *)'
1> There is no context in which this conversion is possible
|
|
|
|
|
The thread proc needs to be defined correctly. For a member function it needs to be declared
static.
Mark
|
|
|
|
|
It looks like your using MFC, so why not use AfxBeginThread ? No big difference though . And are you sure MyThread->Thread is static?
:Gong: 歡迎光臨 吐 西批 :Gong:
|
|
|
|
|
thanks, that solves it
|
|
|
|
|
Hi All,
I posted my question earlier also but wasn't really satisfied. So, asking it again.
I have two comboboxes and if I select first item from first combobox then the second combobox should be disabled. And if I select any other items expect the first item from the first combobox, then the second combo box should be enabled.
I know how to disble and enable a window(using EnableWindow) but the problem I have is that I am not able to select that first item in the first combobox selecting which I disable my second combobox.
In the following code, I was trying it using GetCurSel and SetCurSel but it doesn't work. In the code, m_Au is the member of first combobox.
V is the first item in the first combobox of #define type.
m_C is the member of Second Combobox.
int nToken = m_Au.GetCurSel();<br />
m_Au.SetCurSel(0);<br />
if (nToken == V) <br />
{<br />
m_C.EnableWindow(FALSE); <br />
}<br />
else<br />
{<br />
m_C.EnableWindow(TRUE);<br />
}
I populated my second combobox dynamically based on the first combobox. So, I mean to say that they are related to each other.
I will really appreciate the help.
C++Prog
|
|
|
|
|
celllllllll wrote: I have two comboboxes and if I select first item from first combobox then the second combobox should be disabled. And if I select any other items expect the first item from the first combobox, then the second combo box should be enabled.
if (0 == m_Au.GetCurSel())
{
m_C.EnableWindow(FALSE);
}
else
{
m_C.EnableWindow(TRUE);
}
|
|
|
|
|
I really appreciate the answer but it doesn't work. It is disabling the second combobox for every selection in first combobox.
So, basically we can say the "if" statement isn't working.
Thanks for the help and reading the whole problem.
Thank You
C++Prog
|
|
|
|
|
Where are you calling this code - in response to a CBN_SELCHANGE message?
Are you still doing that m_Au.SetCurSel(0) ??
How about breaking it down...If you change the code as follows and put a breakpoint on the
"if" line....what is the value of CurSel when you select say, the second item in the list?
int CurSel = m_Au.GetCurSel();
if (0 == CurSel)
{
m_C.EnableWindow(FALSE);
}
else
{
m_C.EnableWindow(TRUE);
}
|
|
|
|
|
celllllllll wrote: m_Au.SetCurSel(0);
Why are you still doing it ?
:Gong: 歡迎光臨 吐 西批 :Gong:
|
|
|
|
|
May be you'd want to keep the selection back to the first item after a selection has been made, so you should put it in the bottom. eg :
int nToken = m_Au.GetCurSel();
m_Au.SetCurSel(0);
if (nToken == V)
{
m_C.EnableWindow(FALSE);
}
else
{
m_C.EnableWindow(TRUE);
}
m_Au.SetCurSel(0);
:Gong: 歡迎光臨 吐 西批 :Gong:
|
|
|
|
|
|
I dunno know why it doesn't work.
int nToken = m_Aux.GetCurSel();<br />
if (nToken == V)<br />
{<br />
m_C.EnableWindow(FALSE);<br />
m_Spin.SetRange(0,1000); <br />
}<br />
else<br />
{<br />
m_C.EnableWindow(TRUE);<br />
}<br />
<br />
m_Au.SetCurSel(0);
The code is disabling the complete second combobox but I wanted to disable it for V only. Don't know what to do
Thanks
C++Prog
|
|
|
|
|
Whats return value of EnableWindow for second combobox
|
|
|
|
|
To my fellow C++.NET Programmers, I thank you for reading my question.
I have somewhat of a pickle to deal with. A friend of mine might have asked the same question, but here it is:
I am writing code for a console project using a Microsoft Access database for reading information. The database consists of video titles, their types (DVD/VHS), and the amounts. The titles and types are being read as strings. My problem is that I cannot read the amounts as integers.
Here is some of my code:
The first three lines read the strings. The two that follow are nonexistent.
sID = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_ID")->GetValue() );<br />
sTitle = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_Title")->GetValue() );<br />
sFormat = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_Format")->GetValue() );<br />
iAmount = (???)<br />
iAvailable = (???)<br />
<br />
vVidList[iIndex].getVidID(sID);<br />
vVidList[iIndex].getVidTitle(sTitle);<br />
vVidList[iIndex].getVidFormat(sFormat);<br />
How can I read the information as integers in this case? Thanks!!!
Thank you for reading!
|
|
|
|
|
What type is pGetInfo?
You may be right I may be crazy -- Billy Joel --
Within you lies the power for good, use it!!!
|
|
|
|
|
_RecordsetPtr
Here is more of the code, including the code I already submitted:
CoInitialize(NULL);<br />
try<br />
{<br />
_RecordsetPtr pGetInfo("ADODB.Recordset");<br />
_bstr_t strMyDB("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=FinalDB.mdb");<br />
pGetInfo->Open("SELECT * FROM [Video];", strMyDB, adOpenKeyset, adLockOptimistic, adCmdText);<br />
pGetInfo->MoveFirst();<br />
while (!pGetInfo->EndOfFile)<br />
{<br />
sID = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_ID")->GetValue() );<br />
sTitle = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_Title")->GetValue() );<br />
sFormat = (char*) ( (_bstr_t) pGetInfo->GetFields()->GetItem("Vid_Format")->GetValue() );<br />
<br />
vVidList[iIndex].getVidID(sID);<br />
vVidList[iIndex].getVidTitle(sTitle);<br />
vVidList[iIndex].getVidFormat(sFormat);<br />
<br />
pGetInfo->MoveNext();<br />
iIndex++;<br />
}<br />
pGetInfo->Close();<br />
}<br />
catch (_com_error &e)<br />
{<br />
cout << (char*) e.Description() << endl;<br />
}<br />
::CoUninitialize();
What can I do without having to write two different sets of code: one for string, and one for integers?
|
|
|
|
|