Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Visual C++

Автор: vshersh
Дата сообщения: 07.07.2008 15:11
Vinterfresh

Код: #include "stdafx.h"
#include "afxwin.h"
#include "afxdlgs.h"
#include "iostream.h"

int CALLBACK EnumFontFamExProc(
ENUMLOGFONTEX *lpelfe,
NEWTEXTMETRICEX *lpntme,
DWORD FontType,
LPARAM lParam
);

void main()
{
HWND hwnd=GetDesktopWindow(); // получить окно
HDC hdc=GetDC(hwnd); // связанный DC
LOGFONT lf;
lf.lfFaceName[0] = '\0';
lf.lfCharSet = DEFAULT_CHARSET; // все шрифты
EnumFontFamiliesEx(hdc,&lf,(FONTENUMPROC)EnumFontFamExProc,
(LPARAM) 0,(DWORD) 0);
ReleaseDC(hwnd,hdc);
}

int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe,
NEWTEXTMETRICEX *lpntme,DWORD FontType,LPARAM lParam)
{
cout << lpelfe->elfLogFont.lfFaceName << endl;
return true;
}
Автор: JannLee
Дата сообщения: 07.07.2008 17:48
Вообщем хочу пожаловаться на Visual C++ toolkit 2003. Нет многих библиотек (stdafx.h, afxwin.h, afxdlgs.h). Да и компилирует странно.
Автор: Vinterfresh
Дата сообщения: 08.07.2008 13:52
Большое спасибо, выручил. Осталось только избавиться от пар ненужных шрифтов и вуаля!
Автор: Vinterfresh
Дата сообщения: 14.07.2008 11:48
Господа, новый трабл. Есть проект, написанный на МFC под диалог с исползованием GDI+. Необходимо переделать его в SDI. Скопировал старые файлы с классами в новый проект, компилирую - получаю кучу ошибок с СString. Например, для куска

if(m_pBackground != NULL)
        delete m_pBackground;
m_pBackground = new Bitmap(m_sBackground);

выдает

'Gdiplus::Bitmap::Bitmap(const WCHAR *,BOOL)' : cannot convert parameter 1 from 'CString' to 'const WCHAR *'
Хотя в прошлой версии все работало без сбоев. Никто не подскажет, где я что-то не написал? Может подключил не все?
Автор: Abs62
Дата сообщения: 14.07.2008 16:58
Vinterfresh
Прошлая версия юникодная была, надо полагать?
Автор: paparazzo
Дата сообщения: 15.07.2008 09:13
Можно ли в Visual Studio 2008 генерировать код использующий SSSE3 или SSE3 инструкции?
Автор: Lyrik
Дата сообщения: 15.07.2008 15:39
paparazzo
На 2005 СП1 такой код работает и генерирует SSE3 инструкции (взято с MSDN):

Код: // processor: x86 with SSE3
// Execute the hadd_ps instruction using the intrinsic
// _mm_hadd_ps

#include <stdio.h>
#include <intrin.h>

#pragma intrinsic ( _mm_hadd_ps )

int main( )
{
__m128 u, v, w;
__declspec(align(16)) float a[4] = { 0.1, 0.2, 0.3, 0.4 };
__declspec(align(16)) float b[4] = { 0.0001, 0.002, 0.003, 0.004 };

printf_s("Loading floating-point values\n"
"%5.3f %5.3f %5.3f %5.3f into XMM register.\n ",
a[0], a[1], a[2], a[3] );
u = _mm_load_ps(a);
printf_s("Loading floating-point values\n"
"%5.3f %5.3f %5.3f %5.3f into XMM register.\n",
b[0], b[1], b[2], b[3] );
v = _mm_load_ps(b);

printf_s("Calling _mm_hadd_ps to modify these values.\n");
w = _mm_hadd_ps ( u , v);

printf_s("Result: %5.3f %5.3f %5.3f %5.3f\n", w.m128_f32[0],
w.m128_f32[1], w.m128_f32[2], w.m128_f32[3] );
}
Автор: paparazzo
Дата сообщения: 15.07.2008 16:11

Цитата:
На 2005 СП1 такой код работает и генерирует SSE3 инструкции


Как-то всё сложно, я не программист...
А в опциях компилятора VS2008 нельзя поставить опцию SSE3 или типо того?
У меня стоит 2005, там только опция SSE2... Не знаю ставить ли VS2008...
Автор: Vinterfresh
Дата сообщения: 16.07.2008 13:30
Abs62

Была. Теперь и новая стала, спасибо. И снова по SDI. Можно ли задать в свойствах проекта или еще где опцию, чтобы при изменении размеров окна View перерисовывалась без предварительного затирания?
Автор: Abs62
Дата сообщения: 16.07.2008 17:45
Vinterfresh
Это вряд ли. Думаю, надо самому ковыряться с обработчиком сообщения WM_ERASEBKGND.

Цитата:
The WM_ERASEBKGND message is sent when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting.
Автор: Vinterfresh
Дата сообщения: 17.07.2008 15:12
Как оказалось, достаточно всего лишь убрать с WM_ERASEBKGND вызов стандартного для CView метода
Автор: von_Brutt
Дата сообщения: 19.07.2008 10:35
такой вопрос....какая среда разработки наиболее удобна под висту?? на домашнем компе стоит vista ultimate (64bit), устанавливать второю операционку желания нет...подскажите норм среду разработки.
Автор: Vinterfresh
Дата сообщения: 21.07.2008 11:52
Господа-товарищи, выручайте. Никак не могу сделать следующую штуку: в SDI приложении создана перемещаемая панель, унаследованная от CControlBar, нужно запихнуть на нее объект, производный от CScrollView. Панель сделал, вьюшку примитивную тоже, теперь никак не пойму, как их связать. Не поделитесь ссылкой на какую-нибудь документацию по этой проблеме или куском кода - где и что инициализировать.

Добавлено:
Удивительная штука этот форум: стоит только задать вопрос - тут же сам находишь на него ответ. В качестве апгрейда предыдущего вопроса: на перемещаемой панельке создана вьюшка. Как из нее получить доступ к главному документу приложения?
Автор: Aleksoid1978
Дата сообщения: 24.07.2008 03:48
Подскажите можно ли сделать чтобы программа(MFC) не сворачивалась по нажатию сочетания системных клавиш Win+M, Win+D ???
Автор: blackcat6600
Дата сообщения: 24.07.2008 15:42

Цитата:
Удивительная штука этот форум: стоит только задать вопрос - тут же сам находишь на него ответ.

хотелось бы...
Ребята, я понимаю что мой вопрос - офтоп но спросить больше негде.
есть код на дельфи использующий gdi+ (gdiplus):

Код:
gpbm := TGPBitMap.Create('obIcons.png',true);
G := TGPGraphics.Create(Image1.Canvas.Handle );
G.DrawImage(GPbm, 0,0, 0,0, 16,16, UnitPixel);
Автор: Qraizer
Дата сообщения: 24.07.2008 20:52
Aleksoid1978, я бы препочёл, чтобы таких программ у меня не было. Поэтому не удивлюсь, если ответом будет "никак, кроме как вот таким грязным хаком...". Поясню: когда я нажимаю эти сочетания, я хочу увидеть рабочий стол. Я не хочу менять взаимное расположение открытых в данный момент окон, я не хочу 18 раз тыкать каждому окну в minimize и тем более не хочу закрывать открытые в некоторых из них дочерние можальные диалоги, я просто хочу на несколько секунд добраться до вон той иконки на столе. Какое право имеет твоя программа за меня решать, как мне удобнее?
P.S. У QIPа окошко полупрозрачное, умеет само скрыаться и в конце концов его легко можно закрыть/открыть system-wide акселератором. Так что хоть претензии остаются справделивыми, но для меня терпимо. Разумеется, всё это ИМХО, однако... В общем, выводы делай сам.
Автор: RaP1D
Дата сообщения: 26.07.2008 14:21
Скачал Visual C++ 2008 Express Edition и столкнулся с проблемой:

Создаю консольное приложение, пишу туда:

Цитата:

#include "stdafx.h"
#include "iostream.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    cout << "Please enter a number: ";
    cin >> n;
    for(int i=0; i<=n; i++)
    {
        cout << "\n i: " << i << " n: " << n;
    }
    cin >> n;
    return 0;
}


Нажимаю Ctrl+F5 и высвечивается окошко с ошибкой:

Цитата:

Unable to start program C:\Documents and Settings\ImpulSE\Мои документы\Visual Studio 2008\Projects\NEW\NEW\Debug\NEW.exe

Системе не удаётся найти указанный путь.


Что я сделал не так...

P.S. При создании Консольного приложения я выбирал Empty Project.
Автор: ItsJustMe
Дата сообщения: 26.07.2008 16:22
Ну а сам файл по этому пути создается?
Попробуй что-нибудь не такое длинное и сложное (C:\Project1, например ).
Автор: RaP1D
Дата сообщения: 26.07.2008 18:24
ItsJustMe

Неа, сам файл exe не создается. Пробовал C:\Project - то же самое.
Причем, если при создании я выбираю не Empty Project то все ОК, НО если в cpp файле я меняю содержимое main функции на то, что писал выше то опять не создает exe. Код вроде бы правильный, пробовал компилить на Builder'е все норм.

Тоже самое и с Win32 приложнием...

Все отбой, чет ступил - нада было #include "iostream" писать.
Автор: Lyrik
Дата сообщения: 31.07.2008 23:40
Aleksoid1978

Цитата:
Подскажите можно ли сделать чтобы программа(MFC) не сворачивалась по нажатию сочетания системных клавиш Win+M, Win+D

поставь диалогу свойство DS_SYSMODAL, хотя я согласен с Qraizer, прежде чем это ставить подумайте надо ли.
Автор: Aleksoid1978
Дата сообщения: 01.08.2008 00:47
Lyrik

Я разобрался, все оказалось очень просто - надо было сделать:

ДЛя того чтобы не минимизировалось окно делаем так -
ModifyStyle(WS_MINIMIZEBOX, 0, SWP_NOZORDER);

Чтобы восстановить - ModifyStyle(0, WS_MINIMIZEBOX, SWP_NOZORDER);

и все.

З.Ы. - все равно всем спасибо ...

Автор: Lyrik
Дата сообщения: 13.08.2008 17:24
Всем добрый день!
Столкнулся с такой проблемой: при получении адреса функции я получаю не истинный адрес самой функции, а адрес в таблице импорта (как я думаю). Компилер: студия 2005 сп1. Следующий код под дебаг версией возращает не истинный адрес функции, хотя под релиз версией - все нормально работает.

Код: DWORD WINAPI ThreadFunc( LPVOID );
...
{
LPVOID lpPtr = ThreadFunc;
}
Автор: klimusu
Дата сообщения: 22.09.2008 14:35
подскажите ка реализовать часы с тремя стрелками (часы,минуты,секунды)
мое предположение это нарисовать отрезок (вернее 3 отрезка) в событии paint и потом через таймер поворачивать этот рисунок на определенный угол.. и надо связать поворот с системными часами..
как поворачивать рисунок? как прикрутить поворот к часам?
Автор: Lyrik
Дата сообщения: 22.09.2008 16:24
klimusu
Поворот отрезка можно реализовать с помощью пересчета проекций на оси X и Y. Новая координата по Х : x = d*sin(a), a по Y : y = d*cos(a). С учетом этого вот примерный код:

Код: case WM_KEYUP:
    if ( wParam == 'S' ) {
        const DWORD d = 50;
        HDC hDC = GetDC( hWnd );
        int angle = -180;
        float rad = (angle*M_PI)/180;
        HPEN hPen = CreatePen( PS_SOLID, 0, GetBkColor(hDC) );
        HPEN hPenOld;
        while (1) {
            // рисую отрезок
            MoveToEx( hDC, 100, 100, NULL );
            LineTo( hDC, d*sin(rad)+100, d*cos(rad)+100 );
            // показываю его определенное время
            Sleep(1000);
            // закрашиваю отрезок
            hPenOld = (HPEN)SelectObject( hDC, hPen );
            MoveToEx( hDC, 100, 100, NULL );
            LineTo( hDC, d*sin(rad)+100, d*cos(rad)+100 );
            // задаю новый угол для нового отрезка и устанавливаю цвет
            angle -= 6;
            rad = (angle*M_PI)/180;
            hPen = (HPEN)SelectObject( hDC, hPenOld );
        }
        SelectObject( hDC, hPenOld );
        DeleteObject( hPen );
        ReleaseDC( hWnd, hDC );                
    }
    break;
Автор: klimusu
Дата сообщения: 22.09.2008 16:35
Lyrik
я наверно не правильно понял.. я пытаюсь написать на visual studio 2008, глядя на ваш код теряюсь
Автор: klimusu
Дата сообщения: 22.09.2008 19:26
[more=вот код] private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

Pen^ redPen = gcnew Pen(Color::Red,2);
Pen^ redPenBold = gcnew Pen(Color::Red,4);
Pen^ greenPen = gcnew Pen(Color::Green,1);

//подписи цифр
for (int i=12;i>=1;i--)
{
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(190,190);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(i*30);
e->Graphics->TranslateTransform(120,0);
e->Graphics->RotateTransform(90-i*30);

e->Graphics->DrawString(Convert::ToString(i),gcnew System::Drawing::Font("arial",12),System::Drawing::Brushes::Black,0,0);
}

//для часовых делений
for (int i=0;i<12;i++)
{
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(200,200);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(i*30);
e->Graphics->DrawLine(redPenBold, 90, 0, 100, 0);
}

//для минутных делений
for (int i=0;i<60;i++)
{
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(200,200);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(i*6);
e->Graphics->DrawLine(redPen, 95, 0, 100, 0);
}

//часовая стрелка
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(200,200);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(30*System::DateTime::Now.Hour);
e->Graphics->DrawLine(redPenBold, 0, 0, 65, 0);

//минутная стрелка
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(200,200);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(6*System::DateTime::Now.Minute);
e->Graphics->DrawLine(redPen, 0, 0, 90, 0);

//секундная стрелка
e->Graphics->ResetTransform();
e->Graphics->TranslateTransform(200,200);
e->Graphics->RotateTransform(-90);
e->Graphics->RotateTransform(6*System::DateTime::Now.Second);
e->Graphics->DrawLine(greenPen, 0, 0, 90, 0);

}
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
this->Visible=false;
this->Visible=true;

}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
}
};
}[/more]
Автор: Lyrik
Дата сообщения: 22.09.2008 23:34
klimusu
я привел код для WinAPI, рисование будет по нажатию на кнопку S (в качестве примера). смысл я думал будет ясен: у вас есть отрезок с координатами (x1,y1;x2,y2) и длиной d. чтобы нарисовать его же, но повернутым на определенный угол, то тогда координаты нового отрезка будут (x1,y1;x3,y3), где x3=d*sin(a), y3 = d*cos(a). а - угол на который вы собираетесь повернуть. если же стрелки будут нарисованы не в начале координат, то необходимо будет прибавить смещение обеих осей.
Автор: klimusu
Дата сообщения: 26.10.2008 18:31
есть picturebox1 размер 300на300
я загружаю туда картинку 1200на1200
как мне сделать масштабирование картинка в 300на300?
Автор: SUNGIRLANN
Дата сообщения: 11.12.2008 12:28
Есть проэкт в Visual Studia 6. Программа создаёт dll файл, при помощи которого в MATLAB передаются данные с С++. Проблема в том,что по здравому смыслу у меня величины x и m должны быть одинаковые. А программа выдаёт совершенно немыслимые числа для m. Помогите разобраться,пожалуйста.
#include <mex.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#define raz 20

//Prototype:
void MyEmptyMexFunction(int,int, double*, double*);
//--------------------------------------
void mexFunction(int nOut,
mxArray* pOut[] )
{
int mm=20,nn=1; double *pO; double *pO1;
if (nOut > 0)
{

pOut[0] = mxCreateDoubleMatrix(mm,nn,mxREAL);
pOut[1] = mxCreateDoubleMatrix(mm,nn,mxREAL);

pO = mxGetPr(pOut[0]);
pO1 = mxGetPr(pOut[1]);

MyEmptyMexFunction(mm,nn,pO,pO1);

}

}

//------------Our own auxilary function----------------

void H(double* x, double* aq)
{
int i;
for (i=0;i<raz;i++) aq[i]=x[i];
}


void MyEmptyMexFunction(int mm, int nn, double* pO, double* pO1)
{

double x1[raz];

int n;
int i;

double m[raz];
double x[raz];

x[0]=-10;
n=0;

H(x,x1);
do
{

x[n+1]=n;
m[n]=x1[n];

n++;

}
while(n<raz-1);
for (i=n;i<raz;i++)
{
m[i]=333;
x[i]=333;
}

memcpy(pO, m, i*sizeof(double));
memcpy(pO1, x, i*sizeof(double));
}
Автор: trabelsi
Дата сообщения: 28.03.2009 20:58
У меня следующий вопрос: Создал приложение Windows.Form хочу добавить как источник данных - базу Access. Но среди источников данных есть только Object. В чем причина?

Страницы: 123456789

Предыдущая тема: MSAgent - как получить указатель на MS Balloon?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.