|
Hi,what i call to you
first you register to codeproject and strength the family,
ok, r u tried with OnReceive fucntion?
u can search with "CHATSRVR" in MSDN .The article name
is "Demonstrates a Windows Sockets Server"
very nice programm,u can use this without CArchive class also'
anju
|
|
|
|
|
Hey, I have a COM/ATL dll that I created for automating word. I have another application, written in C, that I need to open MS Word and load my dll. I know how to do all of this, but I am having a problem registering my dll. I currently do this:
WinExec("regsvr32 /s WordAddin.dll", SW_SHOWNORMAL);<br />
rc = RegOpenKeyExHKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Office\\Word\\Addins\\Word.Addin", 0, KEY_ALL_ACCESS, &hKey);<br />
<br />
if(rc != ERROR_SUCCESS)<br />
{<br />
WinExec("regsvr32 /s /u WordAddin.dll", SW_SHOWNORMAL);<br />
WinExec("regsvr32 /s WordAddin.dll", SW_SHOWNORMAL);<br />
}
At the end of my processing, I am unregistering the dll. It seems to work part of the time. The problem is that every once in a while, I click the button to launch MS Word from w/in my application but the dll is not getting registered. When I go out and manually look in the registry, it is not in the there. I have no idea why it is not registering the dll. Can anyone help or give me some insight into why this is happening and how I can fix it? I have looked and there are LOTS of posts about registering dlls and from what I could tell, I am doing it correctly. But something is wrong and I do not know what. It happens sporadically. PLEASE HELP!!!!!
|
|
|
|
|
WinExec("regsvr32 /s ... //line 1
rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ... // line 2 I'm far for sure about whant I'm going to say, but anyway: maybe the problem lies in the fact that WinExec works asynchronously, so by the time line 2 is reached it is possible that sometimes regsvr32 has not completed. In such cases, the last part of the code (which seems to me like a retry, am I right?) executes: again the lack of synchronicity can lead (in unlikely situations) to a wrong sequence of installations and uninstallations. If my guess is right, the problem shoul disappear by either:- Inserting generous
Sleep s after all WinExec s (not an elegant solution). - Using
CreateProcess instead of WinExec , which provides means for your program to wait till regsvr32 terminates before proceeding with the following step.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
You are correct, I am doing the check on the regisry with the hopes of retrying if the first attempt failed. I did initially try the CreateProcess but I kept getting a GPF when my program would reach the createprocess code. So I went with this code instead. The unable to register was happening before I put the RegOpenKeyEx call in though. It seems to run through the code, it just doesn't register the dll. Any thoughts on the CreateProcess, what I might need to do that I wasn't doing before? Can you give me a code snippet of what you think it should be? I appreciate any and all help you have and/or will provide!!!!
|
|
|
|
|
Here's a sketch of how CreateProcess can be used:
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
if(!CreateProcess(
NULL,
(LPSTR)"regsvr32 /s WordAddin.dll",
NULL,
NULL,
FALSE,
DETACHED_PROCESS,
NULL,
NULL,
&si,
&pi)){
}
WaitForSingleObject(pi.hProcess,INFINITE);
DWORD dwExitCode;
GetExitCodeProcess(pi.hProcess,&dwExitCode);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Hey, THANKS!!!!!
I used the snippet and it did differ slightly from my original attempt. Sure enough, after using the CreateProcess, I have not had a problem with it not registering the dll. YOU RULE!!!
|
|
|
|
|
Hi,
I've read the two articles on this site "Creating Custom Controls" and "The Art Of Subclassing" by Chirs Maunder. They're pretty nice but i'm still confused.
Now, i want to build a custom control derived from CWnd.
As far as i understood, if we want to initialize something we use OnPaint function. Is that right?
And how do we add other controls to our control? For example, i want to build some kind of a table and i want column headers drawn on initialization. How and where should i do that?
And finally can you recommend me other tutorials about creating custom controls?
I'm really confused here, any bit of help is highly appreciated. Thanks.
|
|
|
|
|
Declare a class inheriting directly from CWnd. Put the initialisation code in the Create() member. You should also create any child windows at this point. FOr example, you mentioned column headers.
To do that you would declare a member varaible of type CHeaderCtrl in the .h file and call Create on it in the Create() of your Cwnd derived class. You would also need to add code to the OnSize of you CWnd class to place the headre control in the correct place on the CWnd's main window. When it comes to drawing the control you put your drawing code i nyour OnPaint() and make sure you don't overwrite areas taken up by the child controls.
Roger Allen
Sonork 100.10016
I think I need a new quote, I am on the prowl, so look out for a soft cute furry looking animal, which is really a Hippo in disguise. Its probably me.
|
|
|
|
|
Thanks for your reply. Now i have a starting point and thinks will sink better as i go the way.
|
|
|
|
|
When I right click on my tree, I would like to change the selection before displaying the context menu. Just like the behaviour in the class view window of VS.
How do I achieve this?
It's probably obvious, and just can't see it.
Thanks,
BW
{insert witty/thought-provoking saying here}
|
|
|
|
|
::GetMessagePos, CTreeCtrl::ScreenToClient, CTreeCtrl::HitTest and CTreeCtrl::SelectItem.
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
BW
{insert witty/thought-provoking saying here}
|
|
|
|
|
I'm interested in windows programming and I was looking for some books but I don't know wich one to buy. Do you have any suggestions?
marekm
|
|
|
|
|
If your interested in MFC, then I'd recommend "Windows Programming with MFC" by Jeff Prosise. It's helped me out, along with the help I've gotten out here.
Good Luck!
BW
{insert witty/thought-provoking saying here}
|
|
|
|
|
Second that... Jeff's book is great.
Also Sams 'teach yourself c++ in 21 days is quite good'. There's no Windows stuff in it which is great because it sidetracks you from learning the theory.
"I spent a lot of my money on booze, birds and fast cars. The rest I just squandered"
George Best.
|
|
|
|
|
Do you want to learn MFC or Win32 API?
For MFC, I highly recommend that you study from these two books in the exact order listed.
Introduction to MFC Programming with Visual C++ by Richard M. Jones
Programming Windows With MFC by Jeff Prosise
For Win32 API, Programming Windows, The Definitive Guide to the Win32 API by Charles Petzold is unparalleled.
Kuphryn
|
|
|
|
|
For learning straight Win32 API programming - Programming Windows Fifth Edition, Charles Petzold. MS Press, ISBN 1-57231-995-X
For learning the Visual C++ environment and some MFC fundementals - Programming Visual C++ Fifth Edition, Kruglinski, Shepherd, Wingo. MS Press ISBN 1-57231-857-0
and finally...
Programming Windows with MFC Second Edition, Jeff Prosise. MS Press, ISBN 1-57231-695-0
I own all three of these books and find them to be invaluable resources.
Paul Lyons, CCPL Certified Code Project Lurker What a long, strange trip it's been - Robert Hunter
|
|
|
|
|
Hi.
I have two questions about menu in a dialog based application.
First, how do you add an on command for menu items in a dialog based app? In other words, without ON_COMMAND how do you add an event handle for menu item?
Second, I saw two solutions for updating, i.e. enable or disable, menu items in a dialog based app.
1) CMenu *pMenu = GetMenu(0)
This solutions is exactly like updating contextmenu. Am I correct? Do you have to call function to redraw the menu?
2) Add an event handle for WM_KICKIDLE
http://www.codeguru.com/dialog/OnUpdate.shtml
I would like to know the preferred solution for updating menu items in a dialog based app.
Thanks,
Kuphryn
|
|
|
|
|
I'd go for (2) - it will work with toolbar as well.
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
Okay. Thanks.
-----
LRESULT CTestDlg::OnKickIdle(WPARAM, LPARAM)
{
CMenu* pMainMenu = GetMenu();
CCmdUI cmdUI;
for (UINT n = 0; n < pMainMenu->GetMenuItemCount(); ++n)
{
CMenu* pSubMenu = pMainMenu->GetSubMenu(n);
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate(this, FALSE);
}
}
return TRUE;
}
-----
The code above is from solution #2 using WM_KICKIDLE. I am not sure what to set to enable and/or disable an item. Does this line do it?
-----
cmdUI.DoUpdate(this, FALSE);
-----
Kuphryn
|
|
|
|
|
And you can use UpdateDialogControls() for updating toolbars and anything that has a ON_COMMAND_UI handler in your dialog.
|
|
|
|
|
You do use ON_COMMAND to handle menu commands in a dialog based app. I'm not sure what you are getting at.
As for disabling menu items, add an OnInitMenuPopup handler similar to this:
void CMyDialog::OnInitMenuPopup(CMenu* pPopupMenu,
UINT nIndex,
BOOL bSysMenu)
{
CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
CCmdUI cmdui;
cmdui.m_pMenu = pPopupMenu;
cmdui.m_nIndexMax = pPopupMenu->GetMenuItemCount();
for (cmdui.m_nIndex = 0; cmdui.m_nIndex < cmdui.m_nIndexMax; cmdui.m_nIndex++) {
cmdui.m_nID = pPopupMenu->GetMenuItemID(cmdui.m_nIndex);
if (cmdui.m_nID == 0) continue;
cmdui.DoUpdate(this, FALSE);
}
}
Then you can use the normal ON_UPDATE_COMMAND_UI mechanism to enable/disable your menu items.
|
|
|
|
|
Nice!!! Thanks.
One last question. JohnCz of CodeGuru criticized the use of a dialog based app. He mentioned about using SDI without doc and using a CFormView. What are you inputs on using CFormView? What are the advantagesand disadvantages o using CFormView over a dialog based app and vice versa?
Thanks
Kuphryn
|
|
|
|
|
Using ADO, I want to check and see in a database (its only got one table) what the name of the table is. Any clues or links to this?
Thanks,
ns
|
|
|
|
|
Use ADOX.... You can see the catalog...
Or with ado, you can make a select to the sysobjects catalog.
For example
select name, id, xtype from sysobjects where xtype='u'
regards
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|