Num. by 000-0006
メッセージループの課題研究のサクセスファイル、MultiDocumentInterfaceで動作確認済み、ソフトは、Test3.exeをダウンロード
宣言の確認と、型変換の無許可の検定済ファイル。これは、メッセージループの完成品。リリースソフトで動作を確認できます。
デバッカとビルド済み合格プログラム VisualC++
ビルドインプロジェクトリリースバージョン1.0
ファイルはリリースソフトNumber.01(Test3.exe)
// MainFrm.cpp : CMainFrame クラスの実装
//
#include "stdafx.h"
#include "test5.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // ステータス ライン インジケータ
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame コンストラクション/デストラクション
CMainFrame::CMainFrame()
{
// TODO: メンバ初期化コードをここに追加してください。
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("ツール バーの作成に失敗しました。\n");
return -1; // 作成できませんでした。
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("ステータス バーの作成に失敗しました。\n");
return -1; // 作成できませんでした。
}
// TODO: ツール バーをドッキング可能にしない場合は、これらの 3 行を削除してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
return TRUE;
}
// CMainFrame 診断
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame メッセージ ハンドラ
BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
// 基本クラスが実際の動作を行います。
if (!CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
{
return FALSE;
}
CWinApp* pApp = AfxGetApp();
if (pApp->m_pMainWnd == NULL)
pApp->m_pMainWnd = this;
// 2 番目のウィンドウで、[ファイル] メニューの [終了] オプションを [閉じる] に置き換えます。
if (AfxGetApp()->m_pMainWnd != this)
{
CMenu *pMenu = GetMenu();
ASSERT(pMenu);
pMenu->ModifyMenu(ID_APP_EXIT, MF_BYCOMMAND | MF_STRING, ID_FILE_CLOSE, "閉じる(&C)");
}
return TRUE;
}
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return false;}
ShowWindow(hWnd,nCmdShow);return true;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
//long left,top,right,bottom;
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
typedef struct lprc
{
long left,top,right,bottom;
}
DrawTextEx(hdc,"HelloWorld2",12,(lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
EndPaint(hWnd,&ps);return true;
case WM_CREATE:
DrawTextEx(hdc,"HelloWorld2",12, (lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
SetTextColor(hdc,RGB(255,128,128));
DrawTextEx(hdc,"HelloWorld2",12,(lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return true;
}return false;}}
void CMainFrame::OnFileClose()
{
DestroyWindow();
}
********************
Num. by 000-0001
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
WndProc->((HWND)hwnd,(UINT)message,(WPARAM)wParam,(LPARAM)lParam);
if (message.wParam)
{
wLength=(int)lstrlen(message.wParam)*8;
hLength=(int)lstrlen(message.wParam)*16;
countWord=(int)lstrlen(message.wParam);
SetRect(lprect,0,0,wLength,hLength);
DrawText(hdc,message.wParam,countWord,lprect,NULL);
}
else
{
massege &wParam;
if (!wParam)
{
WPARAM *wParam;
wParam=new Char[100];
}
}
Num. by 000-0001
今回は、WndProc(ウインドウプロシージャ)に対して、ポインタを指定します。”hwnd”ウインドウハンドルは、(HWND)キャストされています。メッセージは、キーボードストロークで整数値でキャストする2バイトの(UINT)キャストです。WPARAMとLPARAMパラメーターを引用します。UINTの条件が、”wParam”にオーバーライドされていない時、elseに、WPARAMのポインタ(*)に”wParam”を指定して、wParamにnew演算子にてキーボードストロークを100回分のキーボード入力をします。ifにて、”massage.wParam”にオーバーライドが、真で有れば文字の幅(8ピクセル)、文字の高さ(16ピクセル)、文字の数を、wLength,hLength,countWord各lstrenにて求めます。SetRectにて四角形の座標を入力して、レクトの形に合わせて、自動で文字幅を合わせられます。DrawText関数にて、事前に設定したパラメーターを入力します。
This Appointment is Pointer to WndProc withon Cast Settings,message is Get Key Borad Stroke Matrix 16Bit Cast of UINT,Call WPARAM and LPARAM,This Terms by No OverRide with Execute Then Though and else in WPARAM Pointer is (*) Marks with "wParam" on That by "new" Function and "Char" of KeyBorad Stroke Input Infometion Count to 100,User Reply Typing This Function ask it,if Statement by that "message.wParam" to OverRide is case in True as Word Width(x8),Word Height(x16),Word Count(Equivalent),But Variable(wLength and hLength and countWord) Execute in case by API (lstren) to Result Decision,Square of Rect In Put Coordinate Infomation,Automation Font Word Size at Fit Word,Behind Thing Settings Paramater InPut to DrawText(API).
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
Num. by 000-0002
//PromptType Declaration
HANDLE* hFile;
HANDLE CreateFile
(
LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile
);
//Parameter Settings
LPCTSTR lpFileName="NewSequential_Read_Write";
DWORD dwDesiredAccess=(GENERIC_READ|GENERIC_WRITE);
DWORD dwShareMode=(FILE_SHARE_WRITE);
LPSECURITY lpSecurityAttributes=NULL;
DWORD dwCreationDistribution=(CREATE_ALWAYS);
DWORD dwFlagsAndAttributes=(FILE_FLAG_SEQUENTIAL_SCAN);
HANDLEA hTemplateFile=NULL;
//CreateFile Execute
hFile=CreateFile
(
lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,
dwCreationDistribution,dwFlagsAndAttributes,hTemplateFile
);
if(!ar)
{
CArchive * ar;
CArchive &ar;
}
lpBuffer<
nNumberOfBytesWrite=(DWORD) sizeof(lpBuffer)
BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesWrite,
LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped);
if(!lpBuffer)
{
lpBuffer<
}
lpNmuberOfByteRead=(LPCVOID)sizeof(lpBuffer);
BOOL ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfByteToRead,
LPDWORD lpNumberOfByteRead,LPOVERLAPPED lpOverlapped);
ar[].delete;
hFile[].delete
Num. by 000-0002
ファイルのオープンをする論文です。主にこのソースは、クリエイトファイルのプロトタイプ宣言を行っている他、全ての数値にパラメーターを代入しています。実行される直前に変数が空になりません。アーカイブを使ってストリーミングをしていない場合は、フレームワークからCArchiveにarにポインタし、これを、lpBufferにLPCVIOD形式で、CArchiveからストリーミングされます。arは参照されます。ストリーミング後のlpBufferにsizeofを指定して、ファイルサイズを計算しています。<<コマンドで配列を一斉に読み書きするため、配列子の[ ]は省略されません。最後にarとhFileにdeleteでデストラクタでポインタを最後に削除しておくようにします。
Decision Report of File Open,Main Source is PromtType Declare by Execute else All Value to In Put,No Empty Case Execute is Behind Now.No Use Streaming Case is by Pointer CArchive in Frame Work It.But lpBuffer is Type LPVOID Change Format,Reference Many Place ar,This Open File is sizeof Target lpBuffer in Total Size.Streaming Command is Execute << by at the same time,But Arregement "[ ] " is No Skip.Last is ar and hFile at Desstruct Release of Memory by delete and Mean.
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
Num. by 000-0003
MSG*message;
[module(name=method1)];
struct method1
{
[switch_type(int), switch_is(message)] union members;
{
[case (256),int];
{
if(GetKeyState(17)<0)
{lstrcpy(ctrl,"ON");}
else{lstrcpy(ctrl,"OFF");}
if(GetKeyState(16)<0)
{lstrcpy(shift,"ON");}
else{lstrcpy(shift,"OFF");}
if(GetKeyState(20)<0)
{lstrcpy(caps,"ON");}
else{lstrcpy(caps,"OFF");}
wsprintf(scripts,"MessageCord= %0x , Ctrl = s% , Shift = s% , Caps= s%" , lpMsg , ctrl , shift , caps ) ;
InvalidateRect(hWnd,NULL,TRUE);
break;
}
[case (15),int];
{
hWnd=BeginPaint(hWnd,&ps);
lstrcat(scripts,lpMsg);
TextOut(hWnd,0,0,scripts,lstrlen(scripts));
EndPaint(hWnd,&ps);
break;
}
[case (2),int];
{
PostQuitMessage(0);
};
TranslateMessage(MSG message);
};};
文字コードとドグルの判定により、押下の判定と、文字コードをscriptsにwsprintfにて初期化文字列したものに加え、wParam.messageをMSGとコピーコントラクスタを置き、、*ポインタで、lpMsgを宣言します。ウインドウが描画されるとき、WM_PAINTが実行され、hWnd、ウインドウハンドルに、架空のペイントストラクトに参照して、連動して書き換えます。開始描画が宣言されたあと、scriptsと、lpMsgを追加合成し、実際に、文字コードが、入力した文字に変換されるように翻訳(Translate)を行います。TextOutにて、hWndハンドルに加え、座標を0,0に縦横をセットし、scriptsと、scripts文字数を記述し、TextOutで文字列が出力されます。開始したのは、終わりの宣言をもって、描画を終え、return 0 ; とします。この点でエラーは無いということです。主に此のプログラムは、GetKeyboardStateで入力されたのを、ドグルされていれば、0(Fault:偽)、-1(True:真)と成る、BOOL判定です。是を、GetKeyboardStateと比較することによって、押下されているか判定し、また、システムキー以外の文字位置の場合は、Aであれば文字コードは、其れの位置に相当するソフトキーボードの&H0041であり¥であれば&HFFE5と成ります。ソフトキーボードは、IMEパットで読み出せます。文字コードは、4桁の16進数ですから0からFまであります。また、Translate後の文字コードは、字に変換されるので、&H0041であれば、「A」と同じ文字に直されます。閉じるボタンを押したときは、PostQuitMessage(0);にて、終了処理を取ります。テキストアウトは、インバリデートレクトにて、hWndのハンドルで開始描画し、長方形の取得を、NULLは、領域全体に対して、次のTRUEは、画面を消去して、文字列を描画します。
User's Typing This Program of Terms Hit Out with Push Down,Word Cord Hit Down in Result,Foundation Text Format Insert Variable Value on Conteiner by wsprintf.Copy Construct Copy Template to MSG by wParam.message,Declaration *Pointer to lpMsg.This Program is in Drawing Then Execute WM_PAINT,Add hWnd,WindowHandle and Empty PaintStruct Reference Linking Wote,That Same Times is Begin Paint Drawing Text View of Show Display,scripts[80] Addition Translate Key Cord x0041 at "A".Text Drawing Coordinate Horizontal,Vertical is 0 and 0 Start Setting,with scripts,Addition Count Out Number,Begin and End Drawing is Result return 0;This is No Mistake Result 0.Mainning This Program is Type and Type by GetKeyboardState That Thing Typed Result Hit Down Switch On is Fault(0),True(-1) and Bool Hit Count,Type by Relation Switch up as Same Thing,Through No System key Hit Down,Passenger No System key is Character "A" is x0041(&H0041) Translate "A" Type Word Changes,Show Soft Key Board Reference IME - Pad by Information,\ is xFFE5 is 2Byte Character.Close Window and End Window by PostQuitMessage(0); with Destroy Window.InvalidateRect Coordinate Full Screen Clear with All Vector Drawing by NULL and TRUE with hWnd Handle.
Num. by 000-0004
ウインドウプロシージャ更新版、動作確認済み雛形
test5.exeダウンロード400KB以内のソースコード
こちらのものは、マイクロソフト”.NET”動作可能修正済コード。主に、メッセージループの間に、WCEXを定義しないことで動作可能とした。全てのコマンドは、スルーされるよって雛形のみの動作を確認している
test5.cpp
********************
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VERDRAW | CS_DBLCLKS;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.WndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackgrpund=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMNenuName=NULL;
wcex.lpszClassName="ModelAPP";
wcex.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&wcwex);
hWnd=CreateWindow(wcex.lpszClassName,WS_OVERLAPPEDWINDOW,CW_USERDEFAULT,CW_USERDEFAULT,CW_USERDEFAULT,CW_USERDEFAULT,NULL,NULL,hInstance,NULL);
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return FALSE;}
ShowWindow(hWnd,nCmdShow);return TRUE;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
TextOut(hdc,0,0,"HelloWorld",lstrlen("HelloWorld"));
screct.left=0;
screct.top=0;
screct.right=640;
screct.bottom=480;
DrawTextEx(hdc,"指数は幾つですか",100,&screct,DT_CENTER,NULL);
EndPaint(hWnd,&ps);return 0;
case WM_CREATE:
hDC=GetDC(hwnd);
GetTextExtentPoint32(hdc,"HelloWorld",10,NULL);
ReleaseDC(hWnd,hdc);
return 0;
TextOut(hdc,0,0,"HelloWorld",10);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return TRUE;
}return FALSE;}}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
stdafx.cpp
********************
#include "stdafx.h"
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return FALSE;}
ShowWindow(hWnd,nCmdShow);return TRUE;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
TextOut(hdc,0,0,"HelloWorld",lstrlen("HelloWorld"));
DrawTextEx(hdc,"指数は幾つですか",100,NULL,DT_CENTER,NULL);
EndPaint(hWnd,&ps);return 0;
case WM_CREATE:
SetTextColor(hdc,RGB(255,128,128));
TextOut(hdc,0,0,"HelloWorld",10);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return TRUE;
}return FALSE;}}
メッセージループの課題研究のサクセスファイル、MultiDocumentInterfaceで動作確認済み、ソフトは、Test3.exeをダウンロード
宣言の確認と、型変換の無許可の検定済ファイル。これは、メッセージループの完成品。リリースソフトで動作を確認できます。
デバッカとビルド済み合格プログラム VisualC++
ビルドインプロジェクトリリースバージョン1.0
ファイルはリリースソフトNumber.01(Test3.exe)
// MainFrm.cpp : CMainFrame クラスの実装
//
#include "stdafx.h"
#include "test5.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // ステータス ライン インジケータ
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame コンストラクション/デストラクション
CMainFrame::CMainFrame()
{
// TODO: メンバ初期化コードをここに追加してください。
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("ツール バーの作成に失敗しました。\n");
return -1; // 作成できませんでした。
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("ステータス バーの作成に失敗しました。\n");
return -1; // 作成できませんでした。
}
// TODO: ツール バーをドッキング可能にしない場合は、これらの 3 行を削除してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
return TRUE;
}
// CMainFrame 診断
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame メッセージ ハンドラ
BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
// 基本クラスが実際の動作を行います。
if (!CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
{
return FALSE;
}
CWinApp* pApp = AfxGetApp();
if (pApp->m_pMainWnd == NULL)
pApp->m_pMainWnd = this;
// 2 番目のウィンドウで、[ファイル] メニューの [終了] オプションを [閉じる] に置き換えます。
if (AfxGetApp()->m_pMainWnd != this)
{
CMenu *pMenu = GetMenu();
ASSERT(pMenu);
pMenu->ModifyMenu(ID_APP_EXIT, MF_BYCOMMAND | MF_STRING, ID_FILE_CLOSE, "閉じる(&C)");
}
return TRUE;
}
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return false;}
ShowWindow(hWnd,nCmdShow);return true;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
//long left,top,right,bottom;
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
typedef struct lprc
{
long left,top,right,bottom;
}
DrawTextEx(hdc,"HelloWorld2",12,(lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
EndPaint(hWnd,&ps);return true;
case WM_CREATE:
DrawTextEx(hdc,"HelloWorld2",12, (lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
SetTextColor(hdc,RGB(255,128,128));
DrawTextEx(hdc,"HelloWorld2",12,(lprc.left,lprc.top,lprc.right,lprc.bottom),DT_CENTER,true);
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return true;
}return false;}}
void CMainFrame::OnFileClose()
{
DestroyWindow();
}
********************
Num. by 000-0001
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
WndProc->((HWND)hwnd,(UINT)message,(WPARAM)wParam,(LPARAM)lParam);
if (message.wParam)
{
wLength=(int)lstrlen(message.wParam)*8;
hLength=(int)lstrlen(message.wParam)*16;
countWord=(int)lstrlen(message.wParam);
SetRect(lprect,0,0,wLength,hLength);
DrawText(hdc,message.wParam,countWord,lprect,NULL);
}
else
{
massege &wParam;
if (!wParam)
{
WPARAM *wParam;
wParam=new Char[100];
}
}
Num. by 000-0001
今回は、WndProc(ウインドウプロシージャ)に対して、ポインタを指定します。”hwnd”ウインドウハンドルは、(HWND)キャストされています。メッセージは、キーボードストロークで整数値でキャストする2バイトの(UINT)キャストです。WPARAMとLPARAMパラメーターを引用します。UINTの条件が、”wParam”にオーバーライドされていない時、elseに、WPARAMのポインタ(*)に”wParam”を指定して、wParamにnew演算子にてキーボードストロークを100回分のキーボード入力をします。ifにて、”massage.wParam”にオーバーライドが、真で有れば文字の幅(8ピクセル)、文字の高さ(16ピクセル)、文字の数を、wLength,hLength,countWord各lstrenにて求めます。SetRectにて四角形の座標を入力して、レクトの形に合わせて、自動で文字幅を合わせられます。DrawText関数にて、事前に設定したパラメーターを入力します。
This Appointment is Pointer to WndProc withon Cast Settings,message is Get Key Borad Stroke Matrix 16Bit Cast of UINT,Call WPARAM and LPARAM,This Terms by No OverRide with Execute Then Though and else in WPARAM Pointer is (*) Marks with "wParam" on That by "new" Function and "Char" of KeyBorad Stroke Input Infometion Count to 100,User Reply Typing This Function ask it,if Statement by that "message.wParam" to OverRide is case in True as Word Width(x8),Word Height(x16),Word Count(Equivalent),But Variable(wLength and hLength and countWord) Execute in case by API (lstren) to Result Decision,Square of Rect In Put Coordinate Infomation,Automation Font Word Size at Fit Word,Behind Thing Settings Paramater InPut to DrawText(API).
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
Num. by 000-0002
//PromptType Declaration
HANDLE* hFile;
HANDLE CreateFile
(
LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile
);
//Parameter Settings
LPCTSTR lpFileName="NewSequential_Read_Write";
DWORD dwDesiredAccess=(GENERIC_READ|GENERIC_WRITE);
DWORD dwShareMode=(FILE_SHARE_WRITE);
LPSECURITY lpSecurityAttributes=NULL;
DWORD dwCreationDistribution=(CREATE_ALWAYS);
DWORD dwFlagsAndAttributes=(FILE_FLAG_SEQUENTIAL_SCAN);
HANDLEA hTemplateFile=NULL;
//CreateFile Execute
hFile=CreateFile
(
lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,
dwCreationDistribution,dwFlagsAndAttributes,hTemplateFile
);
if(!ar)
{
CArchive * ar;
CArchive &ar;
}
lpBuffer<
nNumberOfBytesWrite=(DWORD) sizeof(lpBuffer)
BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesWrite,
LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped);
if(!lpBuffer)
{
lpBuffer<
lpNmuberOfByteRead=(LPCVOID)sizeof(lpBuffer);
BOOL ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfByteToRead,
LPDWORD lpNumberOfByteRead,LPOVERLAPPED lpOverlapped);
ar[].delete;
hFile[].delete
Num. by 000-0002
ファイルのオープンをする論文です。主にこのソースは、クリエイトファイルのプロトタイプ宣言を行っている他、全ての数値にパラメーターを代入しています。実行される直前に変数が空になりません。アーカイブを使ってストリーミングをしていない場合は、フレームワークからCArchiveにarにポインタし、これを、lpBufferにLPCVIOD形式で、CArchiveからストリーミングされます。arは参照されます。ストリーミング後のlpBufferにsizeofを指定して、ファイルサイズを計算しています。<<コマンドで配列を一斉に読み書きするため、配列子の[ ]は省略されません。最後にarとhFileにdeleteでデストラクタでポインタを最後に削除しておくようにします。
Decision Report of File Open,Main Source is PromtType Declare by Execute else All Value to In Put,No Empty Case Execute is Behind Now.No Use Streaming Case is by Pointer CArchive in Frame Work It.But lpBuffer is Type LPVOID Change Format,Reference Many Place ar,This Open File is sizeof Target lpBuffer in Total Size.Streaming Command is Execute << by at the same time,But Arregement "[ ] " is No Skip.Last is ar and hFile at Desstruct Release of Memory by delete and Mean.
C(API Reference)Dai's C Laboratory Copy Right 2017.04-
Num. by 000-0003
MSG*message;
[module(name=method1)];
struct method1
{
[switch_type(int), switch_is(message)] union members;
{
[case (256),int];
{
if(GetKeyState(17)<0)
{lstrcpy(ctrl,"ON");}
else{lstrcpy(ctrl,"OFF");}
if(GetKeyState(16)<0)
{lstrcpy(shift,"ON");}
else{lstrcpy(shift,"OFF");}
if(GetKeyState(20)<0)
{lstrcpy(caps,"ON");}
else{lstrcpy(caps,"OFF");}
wsprintf(scripts,"MessageCord= %0x , Ctrl = s% , Shift = s% , Caps= s%" , lpMsg , ctrl , shift , caps ) ;
InvalidateRect(hWnd,NULL,TRUE);
break;
}
[case (15),int];
{
hWnd=BeginPaint(hWnd,&ps);
lstrcat(scripts,lpMsg);
TextOut(hWnd,0,0,scripts,lstrlen(scripts));
EndPaint(hWnd,&ps);
break;
}
[case (2),int];
{
PostQuitMessage(0);
};
TranslateMessage(MSG message);
};};
文字コードとドグルの判定により、押下の判定と、文字コードをscriptsにwsprintfにて初期化文字列したものに加え、wParam.messageをMSGとコピーコントラクスタを置き、、*ポインタで、lpMsgを宣言します。ウインドウが描画されるとき、WM_PAINTが実行され、hWnd、ウインドウハンドルに、架空のペイントストラクトに参照して、連動して書き換えます。開始描画が宣言されたあと、scriptsと、lpMsgを追加合成し、実際に、文字コードが、入力した文字に変換されるように翻訳(Translate)を行います。TextOutにて、hWndハンドルに加え、座標を0,0に縦横をセットし、scriptsと、scripts文字数を記述し、TextOutで文字列が出力されます。開始したのは、終わりの宣言をもって、描画を終え、return 0 ; とします。この点でエラーは無いということです。主に此のプログラムは、GetKeyboardStateで入力されたのを、ドグルされていれば、0(Fault:偽)、-1(True:真)と成る、BOOL判定です。是を、GetKeyboardStateと比較することによって、押下されているか判定し、また、システムキー以外の文字位置の場合は、Aであれば文字コードは、其れの位置に相当するソフトキーボードの&H0041であり¥であれば&HFFE5と成ります。ソフトキーボードは、IMEパットで読み出せます。文字コードは、4桁の16進数ですから0からFまであります。また、Translate後の文字コードは、字に変換されるので、&H0041であれば、「A」と同じ文字に直されます。閉じるボタンを押したときは、PostQuitMessage(0);にて、終了処理を取ります。テキストアウトは、インバリデートレクトにて、hWndのハンドルで開始描画し、長方形の取得を、NULLは、領域全体に対して、次のTRUEは、画面を消去して、文字列を描画します。
User's Typing This Program of Terms Hit Out with Push Down,Word Cord Hit Down in Result,Foundation Text Format Insert Variable Value on Conteiner by wsprintf.Copy Construct Copy Template to MSG by wParam.message,Declaration *Pointer to lpMsg.This Program is in Drawing Then Execute WM_PAINT,Add hWnd,WindowHandle and Empty PaintStruct Reference Linking Wote,That Same Times is Begin Paint Drawing Text View of Show Display,scripts[80] Addition Translate Key Cord x0041 at "A".Text Drawing Coordinate Horizontal,Vertical is 0 and 0 Start Setting,with scripts,Addition Count Out Number,Begin and End Drawing is Result return 0;This is No Mistake Result 0.Mainning This Program is Type and Type by GetKeyboardState That Thing Typed Result Hit Down Switch On is Fault(0),True(-1) and Bool Hit Count,Type by Relation Switch up as Same Thing,Through No System key Hit Down,Passenger No System key is Character "A" is x0041(&H0041) Translate "A" Type Word Changes,Show Soft Key Board Reference IME - Pad by Information,\ is xFFE5 is 2Byte Character.Close Window and End Window by PostQuitMessage(0); with Destroy Window.InvalidateRect Coordinate Full Screen Clear with All Vector Drawing by NULL and TRUE with hWnd Handle.
Num. by 000-0004
ウインドウプロシージャ更新版、動作確認済み雛形
test5.exeダウンロード400KB以内のソースコード
こちらのものは、マイクロソフト”.NET”動作可能修正済コード。主に、メッセージループの間に、WCEXを定義しないことで動作可能とした。全てのコマンドは、スルーされるよって雛形のみの動作を確認している
test5.cpp
********************
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VERDRAW | CS_DBLCLKS;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.WndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackgrpund=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMNenuName=NULL;
wcex.lpszClassName="ModelAPP";
wcex.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&wcwex);
hWnd=CreateWindow(wcex.lpszClassName,WS_OVERLAPPEDWINDOW,CW_USERDEFAULT,CW_USERDEFAULT,CW_USERDEFAULT,CW_USERDEFAULT,NULL,NULL,hInstance,NULL);
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return FALSE;}
ShowWindow(hWnd,nCmdShow);return TRUE;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
TextOut(hdc,0,0,"HelloWorld",lstrlen("HelloWorld"));
screct.left=0;
screct.top=0;
screct.right=640;
screct.bottom=480;
DrawTextEx(hdc,"指数は幾つですか",100,&screct,DT_CENTER,NULL);
EndPaint(hWnd,&ps);return 0;
case WM_CREATE:
hDC=GetDC(hwnd);
GetTextExtentPoint32(hdc,"HelloWorld",10,NULL);
ReleaseDC(hWnd,hdc);
return 0;
TextOut(hdc,0,0,"HelloWorld",10);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return TRUE;
}return FALSE;}}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
stdafx.cpp
********************
#include "stdafx.h"
LRESULT CALLBACK MyProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
bool nCmdShow=0;
bool InitInstance(bool HINSTANCE,bool nCmdShow);
{
if(!hWnd){return FALSE;}
ShowWindow(hWnd,nCmdShow);return TRUE;
}
int wmEvent ; PAINTSTRUCT ps;HDC hdc;
switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MessageBox(hWnd,"HelloWorld","title",MB_OK);
SetBkMode(hdc,OPAQUE);
SetTextColor(hdc,RGB(255,128,128));
SetBkColor(hdc,RGB(0,0,0));
TextOut(hdc,0,0,"HelloWorld",lstrlen("HelloWorld"));
DrawTextEx(hdc,"指数は幾つですか",100,NULL,DT_CENTER,NULL);
EndPaint(hWnd,&ps);return 0;
case WM_CREATE:
SetTextColor(hdc,RGB(255,128,128));
TextOut(hdc,0,0,"HelloWorld",10);
case WM_COMMAND:;wmEvent=(HIWORD(wParam));
default: return DefWindowProc(hWnd,message,wParam,lParam);
return 0;}
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
{switch(message)
{
case WM_INITDIALOG: return TRUE;
}return FALSE;}}
※コメント投稿者のブログIDはブログ作成者のみに通知されます