久しぶりにWindows API &C++でプログラムを書いてみようと思い、大分前にインストールしたVisual Studio 2010を使ってプログラムを書き、ビルドしたところ、リンカでエラーが発生しました。
原因を調べたところ、.Net Frameworkのバージョンが4.5だとVC2010ではビルドできないっぽいので、思い切って2013版をインストールすることにしました。
主にC/C++と生のWindowsAPIでアプリを作るのが目的なのですが、その場合はVisual Studio Express 2013 for Windows Desktopというヤツを入れるみたいです。いままでは、Visual BasicとかC++とかの言語で分かれていたのが統合されて、1つのツールとしてつかえるようになったようです。
それでは、以下はダウンロードから起動までの手順です。
1.ダウンロード
このサイトからダウンロードできます。Microsoft Visual Studio Express 2013 for Windows Desktopというやつを選びましょう。
以下の画像の赤枠で囲まれた「今すぐインストール」という文字をクリックします。
※ダウンロードするにはMicrosoftアカウントにサインインする必要があります。
すると、以下のような画面になるので、左のExpress 2013 for Windows Desktopを選ぶと、ダウンロードが開始されます。
2.インストール
wdexpress_full.exeというインストーラがダウンロードできたはずなので、それを起動します。
起動すると、インストールが始まります。
3.起動
起動したら、新しいプロジェクトを作成します。
C++でWindowsアプリケーションを作成する場合は、以下のようにWin32プロジェクトを選択します。
以上です。
普段Web開発をしている人は息抜きにこういうもので遊んでみてはどうでしょうか?
2014年04月16日
2012年02月18日
Windowsでディレクトリを丸ごと削除コマンド
LinuxとWindowsのコマンドの違いが面倒です。
Windowsで指定したディレクトリを(中のファイル・ディレクトリを含めて)丸ごと消したい場合に使うコマンドです。
ディレクトリを削除するコマンドはrdなのですが、これだけだと空のディレクトリしか削除できません。
空でないディレクトリを削除するには/Sオプションを付けます。
つまり
Windowsで指定したディレクトリを(中のファイル・ディレクトリを含めて)丸ごと消したい場合に使うコマンドです。
ディレクトリを削除するコマンドはrdなのですが、これだけだと空のディレクトリしか削除できません。
空でないディレクトリを削除するには/Sオプションを付けます。
つまり
> rd /S ディレクトリ
でディレクトリを丸ごと削除できます。
-
- | windows
-
- 0 Comment |
- 0 Trackback |
2012年01月23日
Windowsのcdコマンドでドライブを変更する
OS:Windows7 (32bit)
たまに使うけど、忘れてるんだよな~ということで、ちょっとメモ。
cd のオプションに /ドライブ名 を付けるだけです。
例:cドライブで作業していて、dドライブのhogeへカレントディレクトリを変えたいとき
スラッシュ(/)でドライブを指定するみたいですね。
たまに使うけど、忘れてるんだよな~ということで、ちょっとメモ。
cd のオプションに /ドライブ名 を付けるだけです。
例:cドライブで作業していて、dドライブのhogeへカレントディレクトリを変えたいとき
> cd /d d:\hoge
スラッシュ(/)でドライブを指定するみたいですね。
-
- | windows
-
- 0 Comment |
- 0 Trackback |
2010年02月28日
DIBSectionを扱うクラス - (Windows, C/C++)
言語:C/C++
OS:WindowsXP
ライブラリ:Win32API
Windows時代に書いたコードが残っていたので紹介したいと思います。よろしければ参考にして下さい。
今回は、DIBSectionを扱うクラスをC++で実装しました。DIBSectionとは、DDBとDIBの両方の特徴を持ったビットマップです。メモリの値を直接書き換えることも、BitBltなどのDDBの関数を使うこともできます。ここでは、1画素が24ビットのビットマップを扱います。以下はコードです。
まずはヘッダーファイル(dibsec.h)です。
#ifndef __dib_sec_h__
#define __dib_sec_h__
#include <windows.h>
class CDibSection
{
public:
CDibSection(const int w, const int h);
~CDibSection();
HDC getDC() {
return this->hMemDC;
}
int getWidth() {
return (int)(this->bmpInfo.bmiHeader.biWidth);
}
int getHeight() {
return (int)(this->bmpInfo.bmiHeader.biHeight);
}
unsigned char* getPixel() {
return this->pixel;
}
private:
BITMAPINFO bmpInfo;
unsigned char* pixel;
HBITMAP hBmp, hBmpOld;
HDC hMemDC;
int bytePerLine;
};
#endif
#define __dib_sec_h__
#include <windows.h>
class CDibSection
{
public:
CDibSection(const int w, const int h);
~CDibSection();
HDC getDC() {
return this->hMemDC;
}
int getWidth() {
return (int)(this->bmpInfo.bmiHeader.biWidth);
}
int getHeight() {
return (int)(this->bmpInfo.bmiHeader.biHeight);
}
unsigned char* getPixel() {
return this->pixel;
}
private:
BITMAPINFO bmpInfo;
unsigned char* pixel;
HBITMAP hBmp, hBmpOld;
HDC hMemDC;
int bytePerLine;
};
#endif
次にクラス定義のファイル(dibsec.cpp)です。
#include "dibsec.h"
static int _getBytePerLine(const int width)
{
const int r = (width * 3) % 4;
return ((r == 0) ? width * 3 : width * 3 + (4 - r));
}
CDibSection::CDibSection(const int w, const int h)
: pixel(NULL), hBmp(NULL), hBmpOld(NULL), hMemDC(NULL)
{
this->bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
this->bmpInfo.bmiHeader.biWidth = w;
this->bmpInfo.bmiHeader.biHeight = h;
this->bmpInfo.bmiHeader.biPlanes = 1;
this->bmpInfo.bmiHeader.biBitCount = 24;
this->bmpInfo.bmiHeader.biCompression = BI_RGB;
this->bytePerLine = _getBytePerLine(w);
this->hBmp = CreateDIBSection(NULL, &bmpInfo, DIB_RGB_COLORS, (void**)(&pixel), NULL, 0);
this->hMemDC = CreateCompatibleDC(NULL);
this->hBmpOld = (HBITMAP)SelectObject(this->hMemDC, this->hBmp);
}
CDibSection::~CDibSection()
{
if ( this->hBmp != NULL && this->hMemDC != NULL ) {
SelectObject(this->hMemDC, this->hBmpOld);
DeleteObject(this->hBmp);
DeleteDC(this->hMemDC);
}
}
static int _getBytePerLine(const int width)
{
const int r = (width * 3) % 4;
return ((r == 0) ? width * 3 : width * 3 + (4 - r));
}
CDibSection::CDibSection(const int w, const int h)
: pixel(NULL), hBmp(NULL), hBmpOld(NULL), hMemDC(NULL)
{
this->bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
this->bmpInfo.bmiHeader.biWidth = w;
this->bmpInfo.bmiHeader.biHeight = h;
this->bmpInfo.bmiHeader.biPlanes = 1;
this->bmpInfo.bmiHeader.biBitCount = 24;
this->bmpInfo.bmiHeader.biCompression = BI_RGB;
this->bytePerLine = _getBytePerLine(w);
this->hBmp = CreateDIBSection(NULL, &bmpInfo, DIB_RGB_COLORS, (void**)(&pixel), NULL, 0);
this->hMemDC = CreateCompatibleDC(NULL);
this->hBmpOld = (HBITMAP)SelectObject(this->hMemDC, this->hBmp);
}
CDibSection::~CDibSection()
{
if ( this->hBmp != NULL && this->hMemDC != NULL ) {
SelectObject(this->hMemDC, this->hBmpOld);
DeleteObject(this->hBmp);
DeleteDC(this->hMemDC);
}
}
コンストラクタで作成するビットマップのサイズを指定します。作成したビットマップに描画する方法は2つあります。メンバ関数getDC()でビットマップのデバイスコンテキストハンドルを取得して、それに描画する方法と、メンバ関数getPixel()でメモリのポインタを取得して、ピクセルの値を直接書き換える方法です。
ちなみに、デストラクタでオブジェクトを解放していますが、この順番で良いのか自信がありません。多分良いと思いますが、間違っていたら教えて下さい。
-
- 0 Comment |
- 0 Trackback |
2010年01月22日
vc2008でOpenGLを使えるようにする-(Windows, OpenGL, VC2008)
OS:windows xp
ライブラリ:OpenGL
開発環境:VisualC++2008
言語:C/C++
VC2008でOpenGL(GLUT)が使えるようにセッティングしました。
GLUTのダウンロードはこちらです。
以下、セッティングの手順です。
1.ダウンロードしたglut-3.7.6-bin.zipというファイルを解凍(C:/Program Filesの中にコピー)。
2.glut-3.7.6-binの中のファイル(glut32.lib, glut.h, glut32.dll)を以下のディレクトリにコピー。
・glut32.lib->C:/Program Files/Microsoft Visual Studio 9.0/VC/lib
・glut.h->C:/Program Files/Microsoft Visual Studio 9.0/VC/include/glut
※glutというディレクトリを新規作成した。
・glut32.dll->C:/WINDOWS/system32
以上でセッティングは終了。
使用するときは、
#include <glut/glut.h>
とすればOK。
-
- 0 Comment |
- 0 Trackback |