#include "stdafx.h"
#include <afxwin.h>
#include <afxext.h>
#include "resource.h"
BOOL CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void OpenMyFile(char *,CWnd *);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd= CreateDialog(hInstance,LPCSTR(IDD_MAINWINDOW),0,WndProc);
ShowWindow(hWnd,SW_SHOW);
// Main message loop:--------------------
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
BOOL CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char szFilename[255];
switch (message)
{
case WM_INITDIALOG:
UpdateWindow(hWnd);
break;
case WM_GETMINMAXINFO:
break;
case WM_SIZE:
break;
case WM_CLOSE:
DestroyWindow(hWnd);
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (wParam){
case IDC_OPENFILE:
GetDlgItemText(hWnd,IDC_COMBO1,szFilename,255);
OpenMyFile(szFilename,0);
break;}
break;
}
return false;
}
void OpenMyFile(char * filename,CWnd * cwnd)
{
CFileDialog MyOpenFile(true,"",filename,4|2,"",cwnd);
MyOpenFile.DoModal();
return;
}
использование MFC классов в WinAPI приложениях
В WinAPI приложении (которое не MFC) можно вызывать обьекты классов например CFileDialog ? Вообще получилось его вызвать только через одно место :) И выдает ошибку при его открытии при отладке. Впрочем если пропустить то все работает... Я сделал так -
Код:
Вот такая вот заморочка. Чтобы в изначально WinAPI приложении использовать MFC вызовы. Диалог ОТКРЫВАЕТСЯ. При этом пишет ошибку (потому что передаю ему ноль вместо поинтера на обьект).После чего он работает. Честно говоря еще не искал такой инфы в инете.. хотел сам сделать. Но вот наткнулся на СWnd этот. Думаю откуда мне его взять :D
Цитата: Atomic
В WinAPI приложении (которое не MFC) можно вызывать обьекты классов например CFileDialog ?
В свойствах проекта надо поставить "Use MFC in static library" например или в динамических библиотеках (что предпочтительней) и испольльзовать MFC
Наверно правильнее было бы использовать OpenMyFile(szFilename,NULL); ?!
Так все выставлено. :) Такие вещи я и сам знаю. СFileDialog работает. Но перед октрытием пишет что-то.. если пропустить то открывается и все ок. Просто хотел убрать эту ошибку... ну я и передаю ноль туда.. уже по всякому пробовал.. не выходит. когда я пишу под MFC прогу я там ставлю this (тоесть текущий обьект) а поскольку тут нет классов то и this не пашет. седня попробую через класс сделать общение с MFC... может поможет... создам свой класс - буду пихать в него все что касается MFC и вызывать методы потом. Честно говоря мне на API писать проще. А то что проще сделать на MFC хочу вызывать. С MFC пока не умею достаточно хорошо разбираться..
CWnd::FromHandle