|
Hi all,
I am having this issue that when I create a treeviewlist it causes my main dialog to crash when I close it. Here is my code:
here is my class
#define DDX_CONTROL_IMPL(x) \
class x##_ddx : public CWindowImpl<x##_ddx, x> \
{ public: DECLARE_EMPTY_MSG_MAP() };
class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
public CWinDataExchange<CMainDlg>,public CCustomDraw<CMainDlg>,public CDialogResize<CMainDlg>
{
protected:
HKEY Regentry;
DWORD dwData, dwDisp;
CTreeViewCtrlExImpl UpdateList;
CButton Install;
void QueryProductTree();
public:
enum { IDD = IDD_MAINDLG };
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER(IDC_PREF, OnPreference)
COMMAND_ID_HANDLER(IDC_INSTALL, OnInstall)
END_MSG_MAP()
BEGIN_DDX_MAP(CMainDlg)
DDX_CONTROL(IDC_INSTALLTREE, UpdateList)
END_DDX_MAP()
BEGIN_UPDATE_UI_MAP(CMainDlg)
END_UPDATE_UI_MAP()
BEGIN_DLGRESIZE_MAP(CMainDlg)
DLGRESIZE_CONTROL(IDC_INSTALLTREE, DLSZ_SIZE_X|DLSZ_SIZE_Y)
END_DLGRESIZE_MAP()
LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& );
LRESULT OnCancel(WORD , WORD wID, HWND , BOOL& );
LRESULT OnPreference(WORD , WORD wID, HWND , BOOL& );
LRESULT OnInstall(WORD , WORD wID, HWND , BOOL& );
};
#endif
Then here is my main code
LRESULT CMainDlg::OnInitDialog(UINT , WPARAM , LPARAM , BOOL& )
{
CenterWindow();
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDD_MAINDLG),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDD_MAINDLG),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Redmap Update Manager\\Parameters\\ManagePoint",
0, 0, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &Regentry, &dwDisp))
{
printf("Could not create the registry key.");
return 0;
}
dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
EVENTLOG_INFORMATION_TYPE;
Install.Attach(GetDlgItem(IDC_INSTALL));
UpdateList.Attach(GetDlgItem(IDC_INSTALLTREE));
QueryProductTree();
return TRUE;
}
LRESULT CMainDlg::OnCancel(WORD , WORD wID, HWND , BOOL& )
{
RegCloseKey(Regentry);
Regentry = NULL;
delete Regentry;
if (this->m_hWnd != NULL)
EndDialog(wID);
return 0;
}
void CMainDlg::QueryProductTree()
{
CTreeItem mPoint, Rrite;
mPoint = UpdateList.InsertItem ( _T("ManagePoint"), TVI_ROOT, TVI_LAST );
mPoint.AddTail ( _T("ManagePoint 4.3.2.58"), 0 );
mPoint.AddTail ( _T("ManagePoint 4.3.2.83"), 0 );
Rrite = UpdateList.InsertItem ( _T("Re-Rite"), TVI_ROOT, TVI_LAST );
Rrite.AddTail ( _T("Re-Rite 6.1.0.11"), 0 );
Rrite.AddTail ( _T("Re-Rite 6.1.0.23"), 0 );
return;
}
Is there something I lack? Is there something I need to close?
Thanks,
Jayjay
|
|
|
|
|
I got it now I have to destroy the tree and give a value of NULL.
|
|
|
|
|
How can i get the look of satus bar as a installation form ( like we see in the installation of any component of MicroSoft progess bar). In the standerd my it is not looking good.
|
|
|
|
|
I want smooth XP type status bar, where as it seems to be WIN' 98 status bar. How can i do this.
|
|
|
|
|
Sounds like you need to set the PBS_SMOOTH[^] style for the progress bar
|
|
|
|
|
Style should be like XP, Not like Windows-98
|
|
|
|
|
Define what you mean by 'XP rather than Windows 98'...
If you mean using themed controls, then you need to add a manifest, as described here[^].
|
|
|
|
|
thanks for reply, can you tell me how to add manifest file in ATL project ( in Visual Studio 6.0)
|
|
|
|
|
This page[^] describes the process pretty well. Summarised, you do the following:
1. Add a file called 'MyApp.manifest' to your project. Put the following text into it, replacing the bits in italics with text that's appropriate for your application.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="your app's version"
processorArchitecture="X86"
name="your app's name"
type="win32"
/>
<description>A Description of your application</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
2. Add the following line to your project's resource file (the one with the .RC extension).
1 RT_MANIFEST "MyApp.manifest"
3. Rebuild your application
|
|
|
|
|
Hi all,
I've created simple ATLproject from VS2008 and added a simple object.
The object should return the map<> collection through interface method.
How can I do this?
Maybe I should use SAFEARRAY?
If it is possible please point me to the article about using this.
|
|
|
|
|
This question shows you don't understand COM properly: you can't return a std::map from a COM interface method.
Steve
|
|
|
|
|
To expand (slightly) on what Stephen's said - you can't return a std::map from a COM object. Instead, you would probably return an IEnumXXXX interface that allowed the user of your object to iterate over the map contents (see this article[^] for more details).
However, I would suggest you get comfortable with COM & ATL first before trying a more advanced topic like this
|
|
|
|
|
Thanks for help,
I found the following article on MSDN about collections
http://msdn.microsoft.com/en-us/library/3stwxh95(VS.71).aspx
and tried. All works fine.
|
|
|
|
|
How about returning the value as one of the out parameter...
|
|
|
|
|
|
Hi all,
How to I create a Check List Box? I need to create it without the column just a list of items. What do I need to create? What else should I know?
I tried this one but it is not exactly what I need
http://69.10.233.10/KB/wtl/wtl4mfc5.aspx[^]
Thanks,
Jayjay
|
|
|
|
|
Use List Control
Make a List control object say m_list and set extendedstyle like below
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
This will work for you..
|
|
|
|
|
Thanks!!!
ill try that now
|
|
|
|
|
I tried your suggestion however I cant see the checkboxes
This is what I did
CListViewCtrl DownloadList;
DownloadList.Attach(GetDlgItem(IDC_DOWNLOADLIST));
DownloadList.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
DownloadList.InsertItem ( 0, _T("text1") );
DownloadList.InsertItem ( 1, _T("text2") );
DownloadList.InsertItem ( 2, _T("text3") );
.
Is there anything I lack?
Thanks
modified on Wednesday, June 18, 2008 10:40 PM
|
|
|
|
|
Might be a stretch....but is ICC_LISTVIEW_CLASSES in your call to InitCommonControls?
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
do you mean this?
WINCOMMCTRLAPI void WINAPI InitCommonControls(void);
#if (_WIN32_IE >= 0x0300)
typedef struct tagINITCOMMONCONTROLSEX {
DWORD dwSize;
DWORD dwICC;
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
#define ICC_LISTVIEW_CLASSES 0x00000001 // listview, header
What must I do Steve?
Thanks
|
|
|
|
|
I got it now i really have to insert column first
DownloadList.InsertColumn (
|
|
|
|
|
I am trying to create an Ole DB Consumer in order to access data from a table for a conduit application. The problem is that whenever I use the wizard to generate the code it does not generate the data members needed to correspond to the columns of the table I wish to work with.
Do yo have any idea why this would happen?
I can show you an example I saw on another website. Using the wizard with a table called Authors generates the code:
// code generated on Wednesday, April 17, 2002, 10:25 AM
class CAuthorsAccessor
{
public:
LONG m_Au_ID;
TCHAR m_Author[51];
SHORT m_YearBorn;
DBSTATUS m_dwAu_IDStatus;
DBSTATUS m_dwAuthorStatus;
DBSTATUS m_dwYearBornStatus;
DBLENGTH m_dwAu_IDLength;
DBLENGTH m_dwAuthorLength;
DBLENGTH m_dwYearBornLength;
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS,
true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS,
true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_IRowsetChange,
true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT
| DBPROPVAL_UP_DELETE);
}
HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db);
}
void CloseDataSource()
{
m_session.Close();
}
operator const CSession&()
{
return m_session;
}
CSession m_session;
DEFINE_COMMAND_EX(CAuthorsAccessor, L" \
SELECT \
Au_ID, \
Author, \
'Year Born' \
FROM Authors")
BEGIN_COLUMN_MAP(CAuthorsAccessor)
COLUMN_ENTRY_LENGTH_STATUS(1, m_Au_ID,
m_dwAu_IDLength, m_dwAu_IDStatus)
COLUMN_ENTRY_LENGTH_STATUS(2,
m_Author, m_dwAuthorLength, m_dwAuthorStatus)
COLUMN_ENTRY_LENGTH_STATUS(3,
m_YearBorn, m_dwYearBornLength, m_dwYearBornStatus)
END_COLUMN_MAP()
};
Notice the data members I have highlighted with bold? Those are each columns of the table Authors.
When working with my Table, which is called TABLE-CAREER-INTAKE this code is generated:
class CTABLECAREERINTAKE4Accessor
{
public:
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
}
HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
hr = _db.OpenFromInitializationString(L"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=P:\\CareerDb\\db1.mdb;Mode=Share Deny None;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False");
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db);
}
void CloseDataSource()
{
m_session.Close();
}
operator const CSession&()
{
return m_session;
}
CSession m_session;
BEGIN_COLUMN_MAP(CTABLECAREERINTAKE4Accessor)
END_COLUMN_MAP()
};
There are no such data members, despite the fact that my table has about 12 or so columns for each row.
Any ideas?
Sorry if there is an article or thread on this but I searched and could not find any.
|
|
|
|
|
I had the same problem when trying to use Ole DB in a ATL application. The wizard would not generate any columns. I never determined what caused the problem. I eventually had to reinstall VS 2005 and it started working.
|
|
|
|
|
hello, everyone:
I want to operate files without MFC. Exactly speaking, i want to read and write files only with windows standard library. now i dont know how to implement the function of CStdioFile::WriteLine() of MFC with STL,is there anyone could help me?anything will be appreciated,thanks in advance~
|
|
|
|
|