win32apiの豆知識
フォーラム(掲示板)ルール
このようなグループですので、仲良くやって生きましょう(^^)/
このようなグループですので、仲良くやって生きましょう(^^)/
win32apiの豆知識
知っていると便利な知識や面白い関数などなどを書き込むトピックです。
win32apiに関係のあるものなら何でもOKです。是非書き込んでください^^
win32apiに関係のあるものなら何でもOKです。是非書き込んでください^^
Re: win32apiの豆知識
ではいいだしっぺから。
BOOL DrawFrameControl( HDC hdc, LPRECT lprc, UINT uType, UINT uState );
ボタンなどのフレームコントロールの絵を描く関数です。
hdcにはデバイスコンテキスト、lprcにはコントロールの大きさの入ったRECT構造体のポインタを、uTypeにはコントロールの種類、uStateにはコントロールの状態を指定します。
簡単なサンプル
使い道は……
わかんないです^^;
BOOL DrawFrameControl( HDC hdc, LPRECT lprc, UINT uType, UINT uState );
ボタンなどのフレームコントロールの絵を描く関数です。
hdcにはデバイスコンテキスト、lprcにはコントロールの大きさの入ったRECT構造体のポインタを、uTypeにはコントロールの種類、uStateにはコントロールの状態を指定します。
簡単なサンプル
//ボタンを描く
//ボタンの絵を描いているだけなので、クリックしても何も起きません(当たり前ですが)
void DrawButton(HDC hdc, int x, int y, int width, int height)
{
RECT rect = { x, y, x + width, y + height };
//ボタンコントロールを描くにはuTypeにDFC_BUTTONを指定します。
//他にはDFC_CAPTION(タイトルバー)、DFC_SCROLL(スクロールバー)などがあります。
//uTypeがDFC_BUTTONの場合、DFCS_BUTTONPUSHを指定すると、プッシュボタンが描画されます。
//他にはDFCS_BUTTONCHECK(チェックボックス)、DFCS_BUTTONRADIO(ラジオボタン)などがあります。
DrawFrameControl(hdc, &rect, DFC_BUTTON, DFCS_BUTTONPUSH);
}
わかんないです^^;
Re: win32apiの豆知識
>みけCAT さん
おおぉっ、そのような使い方が!他にも自作コントロールにも使えそうですね。
>taketoshi さん
耳年齢測定アプリなどですね!しかしあの音、長時間聞き続けていると気持ち悪くなってくるんですよね…。
おおぉっ、そのような使い方が!他にも自作コントロールにも使えそうですね。
>taketoshi さん
耳年齢測定アプリなどですね!しかしあの音、長時間聞き続けていると気持ち悪くなってくるんですよね…。
Re: win32apiの豆知識
BOOL PathRemoveFileSpec(LPTSTR pszPath);
パスからファイル名を取り除きます。
pszPathには最大長MAX_PATHの、NULL文字で終了するパスを指定します。
ファイル名を取り除いたら1以外を、取り除かなかった場合は0を返します。
この関数を使用するには、「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
パスからファイル名を取り除きます。
pszPathには最大長MAX_PATHの、NULL文字で終了するパスを指定します。
ファイル名を取り除いたら1以外を、取り除かなかった場合は0を返します。
この関数を使用するには、「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
Re: win32apiの豆知識
>>Cirさん
おお、このAPI便利だ。
iniファイルなんかを作るときパス名が必要ですが
今まで_splitpathで細切れにしてからstrncatで再結合していました。
ナイス情報です。
おお、このAPI便利だ。
iniファイルなんかを作るときパス名が必要ですが
今まで_splitpathで細切れにしてからstrncatで再結合していました。
ナイス情報です。
Re: win32apiの豆知識
void PathRemoveExtension(LPTSTR path);
パスから拡張子を取り除きます。
pathには拡張子を取り除きたい、NULL文字列で終了する文字列を指定します。
この関数を使用するには「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
パスから拡張子を取り除きます。
pathには拡張子を取り除きたい、NULL文字列で終了する文字列を指定します。
この関数を使用するには「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
Re: win32apiの豆知識
おお、それも便利だ!存在を知らない便利なAPIはまだまだ多いと思うので、良質なWINAPIのスレにしていきましょう。
では私も。
DWORD = GetModuleFileName(HMODULE hModule,LPSTR lpFilename,DWORD nBuffSize);
実行中のファイル名を含むパスを取得します。hModuleにNULLを指定する事で、自プロセスの取得が可能です。
返り値はバッファにコピーされた文字列長が格納されます
では私も。
DWORD = GetModuleFileName(HMODULE hModule,LPSTR lpFilename,DWORD nBuffSize);
実行中のファイル名を含むパスを取得します。hModuleにNULLを指定する事で、自プロセスの取得が可能です。
返り値はバッファにコピーされた文字列長が格納されます
Re: win32apiの豆知識
便利な関数はまだまだたくさんあるので、皆さんに是非知っていただきたいですね!
BOOL PathRenameExtension(LPTSTR pszPath, LPCTSTR pszExt);
パスの拡張子を変更します。
pszPathには拡張子を変更したいパスを、pszExtは「.(半角ピリオド)」を含む拡張子を指定します。
拡張子の変更に失敗した場合関数は0を、成功した場合関数は0以外を返します。
この関数を使用するには、「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
BOOL PathRenameExtension(LPTSTR pszPath, LPCTSTR pszExt);
パスの拡張子を変更します。
pszPathには拡張子を変更したいパスを、pszExtは「.(半角ピリオド)」を含む拡張子を指定します。
拡張子の変更に失敗した場合関数は0を、成功した場合関数は0以外を返します。
この関数を使用するには、「shlwapi.h」をインクルードし、「shlwapi.lib」を追加してください。
超簡単なサンプル
Re: win32apiの豆知識
Write/GetPrivateProfile~~~系の関数で
ファイル名を"./hoge.hoge"の様に指定するとカレントディレクトリを検索してくれるみたいです(Win7確認済み)
何気に便利だと思いますw
ファイル名を"./hoge.hoge"の様に指定するとカレントディレクトリを検索してくれるみたいです(Win7確認済み)
何気に便利だと思いますw
Re: win32apiの豆知識
補足ですが、
単に"hoge.hoge"の様にするとこれらの関数はWindowsのフォルダ内の検索をしてしまい、残念な感じになってしまいます。。。
単に"hoge.hoge"の様にするとこれらの関数はWindowsのフォルダ内の検索をしてしまい、残念な感じになってしまいます。。。
Re: win32apiの豆知識
身元調査プログラムが書けます。
BOOL GetUserName(LPSTR lpBuff,LPDWORD nSize);
プログラムを実行中のユーザー名を取得します。
同様事例としてGetComputerName関数があります。
nSizeにバッファのサイズを予め指定しておかないとエラーになります。
何故、バッファのサイズと、書き込んだ文字数を分離しなかったのかは謎。
BOOL GetUserName(LPSTR lpBuff,LPDWORD nSize);
プログラムを実行中のユーザー名を取得します。
同様事例としてGetComputerName関数があります。
#include<stdio.h>
#include<windows.h>
int main()
{
char szBuff[512];
DWORD nSize = sizeof(szBuff) / sizeof(szBuff[0]);
BOOL nRet;
nRet = GetUserName(szBuff,&nSize);
if(nRet == FALSE){
strncpy(szBuff,"error",sizeof(szBuff));
}
printf("このパソコンのユーザー名は%sです\n",szBuff);
printf("文字数は%dです\n",nSize);
return 0;
}
何故、バッファのサイズと、書き込んだ文字数を分離しなかったのかは謎。
Re: win32apiの豆知識
WindowsVista以降では(エディションによるが)美しいガラスウィンドウを扱うことができます。
通常はアプリケーションの枠だけにガラス効果が付いていますが、
せっかくなので、クライアント領域にガラス効果を付けてみます
DwmExtendFrameIntoClientAreaという関数を使ってみました。
ウィンドウフレームをクライアント領域まで拡張してくれるようです。
HRESULT WINAPI DwmExtendFrameIntoClientArea
(HWND hWnd,
__in const MARGINS *pMarInset
);
第1引数はウィンドウハンドル、第2引数はMARGINSという構造体へのポインタ。
(詳細:http://msdn.microsoft.com/en-us/library ... 85%29.aspx)
対応情報
バージョン Windows Vista
ヘッダ Dwmapi.h
ライブラリ Dwmapi.lib
DLL Dwmapi.dll
そして、MARGINS構造体を調べたところ、
typedef struct _MARGINS {
int cxLeftWidth;
int cxRightWidth;
int cyTopHeight;
int cyBottomHeight;
} MARGINS, *PMARGINS;
ヴィジュアルスタイルを適用する領域を示すためのメンバが詰まっていました。
-1を入れると、全領域にわたってガラスにしてくれます。
(http://msdn.microsoft.com/en-us/library ... 85%29.aspx)
実際に呼び出す際には、Dwmapi.hとDwmapi.libが必要です。
使い方は簡単で、
MARGINS構造体で、どこまでガラスにするか決めて、
DwmExtendFrameIntoClientArea関数を呼ぶだけです。 ただし、ガラス効果の適用は、黒い部分に適用されるため、ボタンのテキストや、文字などもガラス効果になり
見づらくなることもあります。
通常はアプリケーションの枠だけにガラス効果が付いていますが、
せっかくなので、クライアント領域にガラス効果を付けてみます
DwmExtendFrameIntoClientAreaという関数を使ってみました。
ウィンドウフレームをクライアント領域まで拡張してくれるようです。
HRESULT WINAPI DwmExtendFrameIntoClientArea
(HWND hWnd,
__in const MARGINS *pMarInset
);
第1引数はウィンドウハンドル、第2引数はMARGINSという構造体へのポインタ。
(詳細:http://msdn.microsoft.com/en-us/library ... 85%29.aspx)
対応情報
バージョン Windows Vista
ヘッダ Dwmapi.h
ライブラリ Dwmapi.lib
DLL Dwmapi.dll
そして、MARGINS構造体を調べたところ、
typedef struct _MARGINS {
int cxLeftWidth;
int cxRightWidth;
int cyTopHeight;
int cyBottomHeight;
} MARGINS, *PMARGINS;
ヴィジュアルスタイルを適用する領域を示すためのメンバが詰まっていました。
-1を入れると、全領域にわたってガラスにしてくれます。
(http://msdn.microsoft.com/en-us/library ... 85%29.aspx)
実際に呼び出す際には、Dwmapi.hとDwmapi.libが必要です。
使い方は簡単で、
MARGINS構造体で、どこまでガラスにするか決めて、
DwmExtendFrameIntoClientArea関数を呼ぶだけです。 ただし、ガラス効果の適用は、黒い部分に適用されるため、ボタンのテキストや、文字などもガラス効果になり
見づらくなることもあります。
Re: win32apiの豆知識
WIN32APIに関係しているかどうか怪しいですが…
BOOL WINAPI cdtInit(int FAR *pdxCard, int FAR *pdyCard);
BOOL WINAPI cdtDraw(HDC hdc, int x, int y, int card, int type, COLORREF color);
void WINAPI cdtTerm(void);
ウィンドウズに標準でついてくるゲームの中に、トランプを使ったゲーム(ソリティア等)があります。
そのゲーム内で使用されている、カードを描画するための関数です。
BOOL WINAPI cdtInit(int FAR *pdxCard, int FAR *pdyCard);
トランプ画像を初期化します。
pdxCard, pdyCardには、カードの横幅・縦幅を格納するためのポインタを指定します。
関数が成功すれば0以外が、失敗すれば0が返されます。
BOOL WINAPI cdtDraw(HDC hdc, int x, int y, int card, int type, COLORREF color);
トランプを描画します。
hdcには描画するデバイスコンテキスト、x, yには描画先の座標、cardにはカードナンバー、typeにはカードタイプ、colorにはカードの背景色を指定します。
関数が成功すれば0以外が、失敗すれば0が返されます。
void WINAPI cdtTerm(void);
トランプ画像を開放します。
引数、戻り値はありません。
これらの関数は「cards.dll」内にあるので、LoadLibrary関数、GetProcAddress関数を使用して関数のアドレスを所得し、呼び出してください。
サンプル(ちょっと長い)
BOOL WINAPI cdtInit(int FAR *pdxCard, int FAR *pdyCard);
BOOL WINAPI cdtDraw(HDC hdc, int x, int y, int card, int type, COLORREF color);
void WINAPI cdtTerm(void);
ウィンドウズに標準でついてくるゲームの中に、トランプを使ったゲーム(ソリティア等)があります。
そのゲーム内で使用されている、カードを描画するための関数です。
BOOL WINAPI cdtInit(int FAR *pdxCard, int FAR *pdyCard);
トランプ画像を初期化します。
pdxCard, pdyCardには、カードの横幅・縦幅を格納するためのポインタを指定します。
関数が成功すれば0以外が、失敗すれば0が返されます。
BOOL WINAPI cdtDraw(HDC hdc, int x, int y, int card, int type, COLORREF color);
トランプを描画します。
hdcには描画するデバイスコンテキスト、x, yには描画先の座標、cardにはカードナンバー、typeにはカードタイプ、colorにはカードの背景色を指定します。
関数が成功すれば0以外が、失敗すれば0が返されます。
void WINAPI cdtTerm(void);
トランプ画像を開放します。
引数、戻り値はありません。
これらの関数は「cards.dll」内にあるので、LoadLibrary関数、GetProcAddress関数を使用して関数のアドレスを所得し、呼び出してください。
サンプル(ちょっと長い)
#include <windows.h>
#include <tchar.h>
//card.dll内の関数
typedef BOOL (WINAPI *pfcdtInit)(int FAR *pdxCard, int FAR *pdyCard);
typedef BOOL (WINAPI *pfcdtDraw)(HDC hdc, int x, int y, int card, int type, COLORREF color);
typedef void (WINAPI *pfcdtTerm)(void);
pfcdtInit cdtInit;
pfcdtDraw cdtDraw;
pfcdtTerm cdtTerm;
//cdtDrawで使うと便利なマクロ
//指定した番号、スートからカードを決める
#define CARD(n, k) ((n) * 4 + (k))
//スート(絵柄マーク)
#define SUIT_CLUBS (0) //クラブ
#define SUIT_DIAMONDS (1) //ダイアモンド
#define SUIT_HEARTS (2) //ハート
#define SUIT_SPADES (3) //スペード
//カードの模様
#define B_CROSSHATCH (53)
#define B_PLAID (54)
#define B_WEAVE (55)
#define B_ROBOT (56)
#define B_ROSES (57)
#define B_IVYBLACK (58)
#define B_IVYBLUE (59)
#define B_FISHCYAN (60)
#define B_FISHBLUE (61)
#define B_SHELL (62)
#define B_CASTLE (63)
#define B_BEACH (64)
#define B_CARDHAND (65)
#define B_UNUSED (66)
#define B_X (67)
#define B_O (68)
//カードの描画タイプ
#define D_FACES (0) //表(数字が描かれている面)
#define D_BACKS (1) //裏(模様が描かれている面)
#define D_INVERT (2) //カードを消す(消す色はcolorで指定)
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc;
PAINTSTRUCT ps;
static HMODULE hDll;
static int CardWidth, CardHeight;
switch(msg)
{
//ウィンドウ生成
case WM_CREATE:
//cards.dll読み込み
hDll = LoadLibrary(_T("cards.dll"));
if(hDll == NULL) return -1;
cdtInit = (pfcdtInit)GetProcAddress(hDll, "cdtInit");
cdtDraw = (pfcdtDraw)GetProcAddress(hDll, "cdtDraw");
cdtTerm = (pfcdtTerm)GetProcAddress(hDll, "cdtTerm");
//cards.dll初期化
cdtInit(&CardWidth, &CardHeight);
return 0;
//描画処理
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//カードの描画
for(int i = SUIT_CLUBS; i <= SUIT_SPADES; i ++)
{
for(int j = 0; j < 13; j ++)
{
cdtDraw(hdc, j * CardWidth, (i - SUIT_CLUBS) * CardHeight, CARD(j, i), D_FACES, RGB(255, 255, 255));
}
}
//カードの模様の描画
for(int i = B_CROSSHATCH; i <= B_O; i ++)
{
cdtDraw(hdc, (i - B_CROSSHATCH) * CardWidth / 2, 4 * CardHeight, i, D_BACKS, RGB(255, 255, 255));
}
EndPaint(hWnd, &ps);
break;
//ウィンドウを閉じる
case WM_CLOSE:
cdtTerm();
DestroyWindow(hWnd);
break;
//終了
case WM_DESTROY:
FreeLibrary(hDll);
DestroyWindow(hWnd);
PostQuitMessage(0);
break;
//その他
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
return 0;
}
//ウィンドウクラスの登録
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = _T("cardsdll");
wc.hIconSm = (HICON) LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
return RegisterClassEx(&wc);
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(_T("cardsdll"), _T("DLL"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInst, NULL);
if(!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//WinMain関数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd)
{
MSG msg;
BOOL bRet;
//初期化処理
if(!InitApp(hInstance)) return FALSE;
if(!InitInstance(hInstance, nShowCmd)) return FALSE;
//メッセージループ
while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if(bRet == -1)
{
MessageBox(NULL, TEXT("GetMessage Error"), TEXT("ERROR"), MB_OK | MB_ICONHAND);
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
Re: win32apiの豆知識
BOOL WINAPI cdtDrawExt(HDC hdc, int x, int y, int w, int h, int card, int type, COLORREF color);Cir さんが書きました:これらの関数は「cards.dll」内にあるので、LoadLibrary関数、GetProcAddress関数を使用して関数のアドレスを所得し、呼び出してください。
という関数もありますよ。
描画サイズを指定できるcdtDrawです。
あとcdtAnimateという関数もあるのですけどこいつは使い方が分かってません。
いちおうプロトタイプは
BOOL WINAPI cdtAnimate(HDC hdc, int back, int x, int y, int state);
となってます。
残念ながらcards.dllはVista以降に付属していないのですよね。
ウィンドウズの一部なのでcards.dllだけを他のウィンドウズにコピーすることはライセンス違反になりますので注意しましょう。
Re: win32apiの豆知識
OutputDebugString APIを使うと、Visual Studioの出力ウインドウやDebugViewのようなユーティリティにテキスト出力できることは知られていますが、OutputDebugStringは引数に文字列をひとつ取るだけの仕様で使い勝手がよくありません。
MFCにはTRACEというマクロが用意されていてprintf感覚でデバッグ出力できるのですが、MFCは有償エディションにしか付いていません。
そんなわけでウチではこんな内容のヘッダファイルを作って利用しています。
#自分のブログに投稿していたものですが、せっかくなので紹介します。
(追記)
Windows APIしか使っていないので浮動小数点数(書式指定子%f)が使えません。
自分は滅多に浮動小数点数を使わないのですが、無いと困るという方はCRTライブラリ関数で書き換えてください。
MFCにはTRACEというマクロが用意されていてprintf感覚でデバッグ出力できるのですが、MFCは有償エディションにしか付いていません。
そんなわけでウチではこんな内容のヘッダファイルを作って利用しています。
#ifndef ISLE_TRACE_H
#define ISLE_TRACE_H
#ifdef _DEBUG
#include <windows.h>
#include <stdarg.h>
static void TRACE(LPCTSTR format, ...)
{
TCHAR str[1024+1];
va_list args;
va_start(args, format);
wvsprintf(str, format, args);
OutputDebugString(str);
va_end(args);
}
#else
#define TRACE(...)
#endif
#endif
(追記)
Windows APIしか使っていないので浮動小数点数(書式指定子%f)が使えません。
自分は滅多に浮動小数点数を使わないのですが、無いと困るという方はCRTライブラリ関数で書き換えてください。
Re: win32apiの豆知識
DwmExtendFrameIntoClientArea関数、すごいですね。
※下のウィンドウが透けていますそのようなものはありませんでしたが、必要もありませんでした。shiro4ao さんが書きました:実際に呼び出す際には、Dwmapi.hとDwmapi.libが必要です。
#include <windows.h>
LPCSTR szWindowClass = "SAMPLE_CLASS";
LPCSTR szWindowTitle = "Sample Application";
LPCSTR szHello = "Hello, Windows C Programming !";
typedef struct _MARGINS {
int cxLeftWidth;
int cxRightWidth;
int cyTopHeight;
int cyBottomHeight;
} MARGINS, *PMARGINS;
typedef HRESULT (WINAPI *pDwmExtendFrameIntoClientArea)
(HWND hWnd,
const MARGINS *pMarInset
);
pDwmExtendFrameIntoClientArea _DwmExtendFrameIntoClientArea;
HMODULE hdll;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
switch (message) {
case WM_CREATE:
{
MARGINS m={-1};
_DwmExtendFrameIntoClientArea(hWnd,&m);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rt);
FillRect(hdc,&rt,GetStockObject(BLACK_BRUSH));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASSEX wcex;
HWND hWnd;
hdll=LoadLibrary("Dwmapi.dll");
if(hdll==NULL) {
MessageBox(hWnd,"dllが読み込めません。","エラー",MB_OK | MB_ICONWARNING | MB_TOPMOST);
return 1;
} else {
_DwmExtendFrameIntoClientArea=(pDwmExtendFrameIntoClientArea)
GetProcAddress(hdll,"DwmExtendFrameIntoClientArea");
if(_DwmExtendFrameIntoClientArea==NULL) {
FreeLibrary(hdll);
MessageBox(hWnd,"関数が読み込めません。","エラー",MB_OK | MB_ICONWARNING | MB_TOPMOST);
return 1;
}
}
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = NULL;
RegisterClassEx(&wcex);
hWnd = CreateWindow(szWindowClass,
szWindowTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
FreeLibrary(hdll);
return msg.wParam;
}
- 添付ファイル
-
- grasstest.zip
- テストのプログラムです。
- (10.22 KiB) ダウンロード数: 291 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)