|
Hi Tomasz,
The role of the Exe server is to handle special OPC scanning/communications with a Control System. The Server is designed to run standalone and execute scheduled scan tasks using OPC, but we now have to implement automatic generation of report files that are normally done manually by a user using a client connected to this Server. The report generation objects are located in MFC Extension DLL's that are currently being used by client apps. The need is to execute the existing report objects in the background with hidden windows. My only problem is getting the resource chain initialized properly and I believe your solution to call a Regular DLL will work since it will initialize its own CWinApp object.
Best Regards,
Bill
|
|
|
|
|
Hi.
I have two questions about a dialog based app.
1) How do you add an "About" menu item? For example, a dialog based app features an About class by default. I added a "File" menu. However, the "About" menu does not show up. I could add an "About" menu item, but how do you connect the menu command to the "About" window. In other words, how do you draw the "About" window as the user selects "About?"
2) When you create a dialog based app, AppWizard gives the options to have minimize, maximize, etc. Is there a way to add and/or remove one or more of those features using code? I did not add a feature to minimize, however, now I want to minimize the window. It is too late to use AppWizard.
Thanks,
Kuphryn
|
|
|
|
|
the default code built in is a message handler in the applications .cpp:
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
END_MESSAGE_MAP() and then a function which handles it:
void CMyApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
} of course you have to declare this function in the app's .h file..
not sure about the 2nd question.
-dz
|
|
|
|
|
|
If you want to minimise the window from code (but not put a minimise featuer on your dialog) then post a WM_SYSCOMMAND message with SC_MINIMIZE as wParam.
SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
cheers
Adam.
"I spent a lot of my money on booze, birds and fast cars. The rest I just squandered"
George Best.
|
|
|
|
|
|
I'm not sure where to ask this question, but i have found no one and no documentation out there that has answered my question in the .Net world. I am using the SourceSafeTypeLib as a reference in a C# project. I am doing a get_version(label) on a particular version of a vssitem. I am returned the object but one of the properties (VersionNumber) causes an "Invalid OLEVERB structure" COMException. Does anyone have any ideas what the problem could be or could someone explain this Exception message to me?
|
|
|
|
|
I want to add feature in my applications to send email silently via outlook express. Any example code you know then please tell me.
Bye Bye
|
|
|
|
|
look here : http://www.codeproject.com/internet/#MAPI[^]
-c
"Kate said / The flowers of intolerance and hatred / Are blooimg kind of early this year / Someone's been watering them.
-- Robyn Hitchcock, Devil's Radio
|
|
|
|
|
Hi there !
An alternative to the excellent articles on MAPI in the corresponding section of this site could be the MSMAPI32.ocx control that installs with VS5.0+, which is documented in MAPI98.CHM. I use it to send emails from JScripts without
using Outlook:
var mapi = new ActiveXObject("MAPI.Session");<br />
mapi.Logon(profileString);<br />
<br />
var message = mapi.Outbox.Messages.Add();<br />
message.Subject = "The message subject";<br />
message.Text = "The message body";<br />
<br />
var recip = message.Recipients.Add();<br />
recip.Name = "me@here.now";<br />
recip.Type = 1;<br />
recip.Resolve();<br />
<br />
message.Send();
You could convert this sample to VC++ using the #import directive and
some COM knowledge, or search the microsoft site for MAPI.Session examples.
Good luck!
Alwin
|
|
|
|
|
Hello again,
I made MCI as child in a dialog(parent) ...
And i play a movie on that ...
I haven't problem in playing the movie ...
But there is strange problem only on WinXP
When i start playing ... i can't see movie on the child window ...
And when i move the parent window(refreshing) then i can see the movie !
What's wrong ...
My guess is OnEraseBkgnd in my parent dialog:
BOOL CElecompDlg::OnEraseBkgnd(CDC* pDC)
{
if(m_hBmp)
{
BITMAP bm;
GetObject(m_hBmp, sizeof(bm), &bm);
HDC hMemdc = CreateCompatibleDC(pDC->m_hDC);
if(hMemdc)
{
HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemdc, m_hBmp);
if(hOldBmp)
{
BitBlt(pDC->m_hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemdc, 0, 0, SRCCOPY);
SelectObject(hMemdc, hOldBmp);
DeleteDC(hMemdc);
DeleteObject(hOldBmp);
return TRUE;
}
else
DeleteDC(hMemdc);
}
}
return CDialog::OnEraseBkgnd(pDC);
}
So, i used Invalidate function for refreshing child window affter i start playing movie in OnInitialDialog, But i still can not see movie in first of running program
Please help me
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
I'm not sure what your problem is, but you might want to try setting the "Clip children" style in your parent dialog resource properties.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
GREAAAAAAAAAAT !!!
You are WONDERFUL !!!
You answered all of my questions
Thanks again Joaquín
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
I am having some trouble with something that is probably very simple. I have a COM project (exe) and it does not use any ATL. It is fairly simple, a dialog box opens with 2 buttons, the first is to run MS Word. When pressed, word opens up and the user can enter some text. After a lot of research and trial-and-error, I was able to put a button on the Word toolbar. But I do not know how to know when the button has been pressed. This is my class:
/*----------------------------------------------------------------------------*/
const IID IID_IWordAppEventSink = __uuidof(Word::ApplicationEvents);
const IID IID_IWordDocEventSink = __uuidof(Word::DocumentEvents);
const IID IID_ISpecialSaveExit = __uuidof(Office::CommandBarButton);
/*----------------------------------------------------------------------------*/
class CWordEventSink : public CCmdTarget
{
DECLARE_DYNCREATE(CWordEventSink)
public:
CWordEventSink();
virtual ~CWordEventSink();
BOOL Advise(IUnknown* pSource, REFIID iid);
BOOL Unadvise(REFIID iid);
void SetLauncher(CTestDlg* pWordLauncher);
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWordEventSink)
public:
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
protected:
// Generated message map functions
//{{AFX_MSG(CWordEventSink)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Generated OLE dispatch map functions
//{{AFX_DISPATCH(CWordEventSink)
afx_msg void OnAppStartup();
afx_msg void OnAppQuit();
afx_msg void OnAppDocumentChange();
afx_msg void OnDocNew();
afx_msg void OnDocOpen();
afx_msg void OnDocClose();
afx_msg void PSISaveAndExit();
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
private:
CConnectionAdvisor m_AppEventsAdvisor;
CConnectionAdvisor m_DocEventsAdvisor;
CConnectionAdvisor m_BarEventsAdvisor;
CTestDlg* m_pWordLauncher;
};
I kind of cheated by using an example article written by Christian Staffe called Automating and Eventing in Word. But it never mentioned what to do to capture when the button has been pressed. Does anyone have any thoughts or suggestions? Examples would be great to, I am still trying to learn all this COM stuff..........
|
|
|
|
|
Hello,
I've a document class with an array of records each containing about 15 fields. Currently, I send messages to my GUI to update a record (listview) if that record's fields have been changed (intercepted at documents 'setrecordfield()' function). The problem is that the user can change as many as 5 fields in one GUI operation. This causes my current design to send 5 messages to the GUI to refresh the display--this can become very slow with an increasing number of records/changes (plus, some of my display text items require relatively long functions to compute for each update).
I've put some thought in to this but haven't come up with an eloquent design that would only update the GUI when it 'should' (i.e., after the document has stopped changing but not too long after so that the user witnesses delay). I could litter my code with conditional update calls, but that seems like a lot of 'ifs' and would require that I keep changing these places throughout development. I'm not a professional MFC developer, so any hints or approches would be appreciated.
Thanks!
JennyP
|
|
|
|
|
Maybe you can take advantage of LockWindowUpdate just like this:
CYourView:SomeCommandHandler()
{
AfxGetMainWnd()->LockWindowUpdate();
AfxGetMainWnd()->UnlockWindowUpdate();
}
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thanks for the response.
In my case, its not the graphical device painting that takes time, it's the GUI class calculations that I employ each time the data changes. Unfortunately, the data will change 5 times "at once" causing these calculations to be run 5 times when all I need is one calculation to be done on the last data-change (only after the "last" data change).
Thanks!
JennyP
|
|
|
|
|
Well, you can develop a similar custom-made mechanism that tells the "GUI class" not to initiate calculations when in the middle of a sequence of record changes. Don't know how hard this would be to accomplish in your particular case.
Another altenative is to have GetData and SetData methods for your doc class that allows you to perform the changes on a local copy of the data. When done, these changes can be plugged again into the document class, thus triggering the GUI updating.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I am looking for an MFC Grid. The latest MFC Grid 2.24 looks good but, alas, I am still stuck with MSDEV 6 (no .NET at this point).
I would like to check out MFC Grid 2.23 which I believe is still configured for MSDEV6. If anyone knows where I could download 2.23 or could email it to me, I would be eternally gratefull.
Thanks
beamsack
|
|
|
|
|
I'd say v2.24 still works in VC++ 6.0, it is only it's been upgraded to work for VC++ .NET also.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thanks for the reply Joaquin,
I tried to build the project and lack the MFC dlls for MSVC 7.
My project is MSVC 7 adverse right now so even if I could scare up the DLLs for evaluation - I would never be able to distribute my app. I had hoped that the platform SDK would have had the latests MFC dlls not this was not to be.
beamsack
|
|
|
|
|
Well, I'd say that, although the demo project works only for .NET, the library itself should be compatible with VC++ 6.0.
Nevertheless... (don't tell anybody ) Chris was smart (or careless?) enough as to leave this trace in the site:
http://www.codeproject.com/miscctrl/gridctrl/gridctrl_demo223.zip[^]
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Joaquin,
Thanks a million.
I think I will follow your suggestion and try to build 2.24 with 6.
The problem I had described was at run-time not build time.
Time for some fun
beamsack
|
|
|
|
|
Hi there,
I wrote this code for changing windows background color, it works fine in Win98 but it doesn't wrok on WinXP and Win2000 !
HBRUSH CSearchDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor)
{
case CTLCOLOR_DLG:
{
CBrush brush(RGB(0, 30, 104));
pDC->SelectObject(brush);
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)brush.GetSafeHandle();
}
case CTLCOLOR_STATIC:
{
}
case CTLCOLOR_EDIT:
{
}
}
return hbr;
}
What's wrong ???
Please help me !
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
{
CBrush brush(RGB(0, 30, 104));
pDC->SelectObject(brush);
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)brush.GetSafeHandle();
} Since brush is defined in the local scope, it gets destroyed as soon as the function exists. I'd say it's merely a matter of luck that this works in Win98. Instead, make brush a member variable of CSearchDialog and initialize it only once (for instance, in the constructor for the dialog).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|