#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#define ID_MYTOOL 100
#define ID_EDIT 110
#define ID_EDIT2 101
#define ID_MYTIMER 102
#define ID_STATUS 103
#define MAXWEAPONS 324
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include "resource.h"
#include "Impassible.h"
#include "header.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MyEditProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK MyDlgProc(HWND,UINT,WPARAM,LPARAM);
HWND MyCreateToolbar(HWND);
void MyCreateStatusbar(HWND);
TBBUTTON tbb[] = {
{STD_FILESAVE,IDM_SAVE,TBSTATE_ENABLED,BTNS_BUTTON},
{STD_FILENEW, IDM_NEW, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_FILEOPEN, IDM_OPEN, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_COPY, IDM_COPY, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_CUT, IDM_CUT, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_PASTE,IDM_PASTE,TBSTATE_ENABLED,BTNS_BUTTON},
{STD_DELETE,IDM_DEL,TBSTATE_ENABLED,BTNS_BUTTON},
{STD_UNDO,IDM_UNDO,TBSTATE_ENABLED,BTNS_BUTTON},
};
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
int MyNew(HWND);
int MyOpen(HWND);
int MySave(HWND);
int MySaveAs(HWND);
int MyConfirm(HWND);
int MyYmd(HWND, HWND, int);
int MySetInfo(HWND hEdit, HWND hEdit2);
BOOL bInfo=TRUE;
TCHAR szClassName[] = TEXT("dswebmaster"); //ウィンドウクラス
HINSTANCE hInst; //インスタンスハンドル
TCHAR szTitle[128] = TEXT("大戦略WEB MASTER Ver 1.1.1.2");
TCHAR szTitle_org[] = TEXT("大戦略WEB MASTER Ver 1.1.1.2[%s](%dバイト)");
TCHAR szFile[MAX_PATH];
TCHAR szFileTitle[MAX_PATH];
HWND hMain;//メインウィンドウのハンドル
HWND hSubEdit;
WNDPROC OrgEditProc;
int nPet;
TCHAR DialogText;
HWND hEdit, hEdit2;
int AddCount = FALSE;
HWND g_hStatus;
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;
HACCEL hAccel;
hInst = hCurInst;
if (!InitApp(hCurInst))
return FALSE;
if (!InitInstance(hCurInst, nCmdShow))
return FALSE;
hAccel = LoadAccelerators(hCurInst, TEXT("MYACCEL"));
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (bRet == -1) {
break;
} else {
if (!TranslateAccelerator(hMain, hAccel, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
return (int)msg.wParam;
}
//ウィンドウ・クラスの登録
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc; //プロシージャ名
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;//インスタンス
wc.hIcon = (HICON)LoadImage(hInst,
TEXT("MYICON"),
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 = TEXT("MYMENU"); //メニュー名
wc.lpszClassName = szClassName;
wc.hIconSm = (HICON)LoadImage(hInst,
TEXT("MYICON"),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
return (RegisterClassEx(&wc));
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szClassName,
szTitle, //タイトルバーにこの名前が表示されます
WS_OVERLAPPEDWINDOW, //ウィンドウの種類
CW_USEDEFAULT, //X座標
CW_USEDEFAULT, //Y座標
CW_USEDEFAULT, //幅
CW_USEDEFAULT, //高さ
NULL, //親ウィンドウのハンドル、親を作るときはNULL
NULL, //メニューハンドル、クラスメニューを使うときはNULL
hInst, //インスタンスハンドル
NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hMain = hWnd;
return TRUE;
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
int id, nStart, nEnd;
static HMENU hMenu;
RECT rc;
MENUITEMINFO mi;
INITCOMMONCONTROLSEX cc,ic;
static HWND hTool,hStatus;
switch (msg) {
case WM_CREATE:
hMenu = GetMenu(hWnd);
// SetTimer(hWnd,ID_MYTIMER,500,NULL);
hEdit = CreateWindow(
TEXT("EDIT"),
NULL,
WS_CHILD | WS_VISIBLE |
ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL |
ES_AUTOHSCROLL | WS_HSCROLL,
0, 0,
0, 0,
hWnd,
(HMENU)ID_EDIT,
hInst,
NULL);
hEdit2 = CreateWindow(
TEXT("EDIT"),
NULL,
WS_CHILD | WS_VISIBLE |
ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0, 0,
0, 0,
hWnd,
(HMENU)ID_EDIT2,
hInst,
NULL);
hSubEdit = hEdit2;
lstrcat(szTitle, TEXT("[無題]"));
SetWindowText(hWnd, szTitle);
Edit_LimitText(hEdit, 0);
OrgEditProc = (WNDPROC)SetWindowLongPtr(hEdit,
GWL_WNDPROC,
(LONG_PTR)MyEditProc);
//ツールバー作成処理
cc.dwSize = sizeof(INITCOMMONCONTROLSEX);
cc.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&cc);
hTool = MyCreateToolbar(hWnd);
//ステータスバー作成処理
ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
ic.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&ic);
MyCreateStatusbar(hWnd);
break;
case WM_SIZE:
MoveWindow(hEdit, 0, 30, LOWORD(lp), HIWORD(lp)-53 , TRUE);
SendMessage(hTool,TB_AUTOSIZE,0,0);
SendMessage(g_hStatus, msg, wp, lp);
break;
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDM_NEW:
MyNew(hEdit);
break;
case IDM_OPEN:
MyOpen(hEdit);
break;
case IDM_END:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDM_SAVE:
MySave(hEdit);
break;
case IDM_SAVEAS:
MySaveAs(hEdit);
break;
case IDM_UNDO:
SendMessage(hEdit, EM_UNDO, 0, 0);
break;
case IDM_CUT:
SendMessage(hEdit, WM_CUT, 0, 0);
break;
case IDM_COPY:
SendMessage(hEdit, WM_COPY, 0, 0);
break;
case IDM_PASTE:
SendMessage(hEdit, WM_PASTE, 0, 0);
break;
case IDM_DEL:
SendMessage(hEdit, WM_CLEAR, 0, 0);
break;
case IDM_ALL:
SendMessage(hEdit, EM_SETSEL, 0, -1);
break;
case IDM_YMD1:
MyYmd(hEdit, hEdit2, 1);
break;
case IDM_YMD2:
MyYmd(hEdit, hEdit2, 2);
break;
case IDM_HMS1:
MyYmd(hEdit, hEdit2, 3);
break;
case IDM_HMS2:
MyYmd(hEdit, hEdit2, 4);
break;
case IDM_______A_1:
DialogBox(hInst,TEXT("MYDIALOG"),hWnd,
(DLGPROC)MyDlgProc);
}
if (lp != (LPARAM)hEdit)
return DefWindowProc(hWnd, msg, wp, lp);
switch (HIWORD(wp)) {
case EN_CHANGE:
MySetInfo(hEdit, hEdit2);
break;
}
break;
case WM_SETFOCUS:
SetFocus(hEdit);
break;
case WM_INITMENU:
if (SendMessage(hEdit, EM_CANUNDO, 0, 0) == 0) {
EnableMenuItem(hMenu, IDM_UNDO, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu, IDM_UNDO, MF_BYCOMMAND | MF_ENABLED);
}
mi.cbSize = sizeof(MENUITEMINFO);
mi.fMask = MIIM_STATE;
if (bInfo) {
mi.fState = MFS_CHECKED;
SetMenuItemInfo(hMenu, IDM_INFO, FALSE, &mi);
} else {
mi.fState = MFS_UNCHECKED;
SetMenuItemInfo(hMenu, IDM_INFO, FALSE, &mi);
}
SendMessage(hEdit, EM_GETSEL, (WPARAM)&nStart, (LPARAM)&nEnd);
if (nStart == nEnd) {
EnableMenuItem(hMenu, IDM_CUT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_COPY, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu, IDM_CUT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_COPY, MF_BYCOMMAND | MF_ENABLED);
}
if (IsClipboardFormatAvailable(CF_TEXT)) {
EnableMenuItem(hMenu, IDM_PASTE, MF_BYCOMMAND | MF_ENABLED);
} else {
EnableMenuItem(hMenu, IDM_PASTE, MF_BYCOMMAND | MF_GRAYED);
}
DrawMenuBar(hWnd);
break;
case WM_CLOSE:
id = MyConfirm(hEdit);
if (id == IDCANCEL)
break;
id = MessageBox(hWnd,
TEXT("終了してもよろしいですか"),
TEXT("確認"),
MB_YESNO | MB_ICONQUESTION);
if (id == IDYES) {
SetWindowLong(hEdit, GWL_WNDPROC, (LONG)OrgEditProc);
DestroyWindow(hEdit);
DestroyWindow(hEdit2);
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
int MyNew(HWND hEdit)
{
int id;
id = MyConfirm(hEdit);
if (id == IDCANCEL) {
return -1;
}
Edit_SetText(hEdit, TEXT(""));
SetWindowText(GetParent(hEdit), TEXT("大戦略WEB MASTER Ver 1.0.1.5[無題]"));
lstrcpy(szFile, TEXT(""));
return 0;
}
int MyOpen(HWND hEdit)
{
int id;
HWND hMain;
DWORD dwSize = 0L;
OPENFILENAME ofn;
HANDLE hFile;
DWORD dwAccBytes;
LPTSTR lpszBuf;
HGLOBAL hMem;
id = MyConfirm(hEdit);
if (id == IDCANCEL)
return -1;
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hEdit;
ofn.lpstrFilter = TEXT("大戦略web master(*.dsweb)\0*.dsweb\0All files(*.*)\0*.*\0\0");
ofn.lpstrFile = szFile;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFile = MAX_PATH;
ofn.nMaxFileTitle = MAX_PATH;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt = TEXT("dsweb");
ofn.lpstrTitle = TEXT("大戦略WEB MASTER ファイルを開く");
if(GetOpenFileName(&ofn) == 0)
return -1;
hFile = CreateFile(szFile, //ファイル名
GENERIC_READ, //読みとり/書き込みアクセス
0, //共有設定 0だと共有対象としない
NULL, //セキュリティ属性
OPEN_ALWAYS, //ファイルがすでに存在しているかどうかの考慮
FILE_ATTRIBUTE_NORMAL, //ファイル属性
NULL);
dwSize = GetFileSize(hFile, NULL);
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * (dwSize + 1));
if (hMem == NULL) {
MessageBox(hEdit,
TEXT("メモリの確保に失敗しました\n一度終了し、現在実行中のプログラムを一度停止してから再度試してください"),
TEXT("大戦略WEB MASTER"),
MB_ICONEXCLAMATION | MB_ICONERROR);
return -1;
}
lpszBuf = (LPTSTR)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
lpszBuf[dwAccBytes] = TEXT('\0');
Edit_SetText(hEdit, lpszBuf);
wsprintf(szTitle, szTitle_org, szFileTitle, dwSize);
hMain = GetParent(hEdit);
SetWindowText(hMain, szTitle);
CloseHandle(hFile);
GlobalUnlock(hMem);
GlobalFree(hMem);
return 0;
}
int MySaveAs(HWND hEdit)
{
OPENFILENAME ofn;
HANDLE hFile;
DWORD dwAccBytes;
LPTSTR lpszBuf;
int nLen;
HGLOBAL hMem;
nLen = GetWindowTextLength(hEdit);
hMem = GlobalAlloc(GHND, nLen + sizeof(TCHAR));
lpszBuf = (LPTSTR)GlobalLock(hMem);
GetWindowText(hEdit, lpszBuf, nLen + 1);
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hEdit;
ofn.lpstrFilter = TEXT("大戦略web master(*.dsweb)\0*.dsweb\0All files(*.*)\0*.*\0\0");
ofn.lpstrFile = szFile;
ofn.lpstrFileTitle = szFileTitle;
ofn.nFilterIndex = 1;
ofn.nMaxFile = MAX_PATH;
ofn.nMaxFileTitle = MAX_PATH;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
ofn.lpstrDefExt = TEXT("dsweb");
ofn.lpstrTitle = TEXT("名前を付けて保存する");
if(GetSaveFileName(&ofn) == 0)
return -1;
hFile = CreateFile(szFile,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS, //常に新しいファイルを作成する
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(hEdit,
TEXT("ファイルのオープンに失敗しました"),
TEXT("Error"),
MB_OK | MB_ICONEXCLAMATION);
return -1;
}
WriteFile(hFile,
lpszBuf,
(DWORD)lstrlen(lpszBuf) * sizeof(TCHAR),
&dwAccBytes,
NULL);
wsprintf(szTitle, szTitle_org, szFileTitle, nLen);
SetWindowText(GetParent(hEdit), szTitle);
if(CloseHandle(hFile) == 0)
MessageBox(hEdit, TEXT("Error CloseHandle"), TEXT("Error"), MB_OK);
SendMessage(hEdit, EM_SETMODIFY, FALSE, 0);
GlobalUnlock(hMem);
GlobalFree(hMem);
return 0;
}
int MySave(HWND hEdit)
{
HANDLE hFile;
DWORD dwAccBytes;
int nLen;
LPTSTR lpszBuf;
HGLOBAL hMem;
if (lstrcmp(szFile, TEXT("")) == 0) {
MessageBox(hEdit,
TEXT("ファイル名が付けられていません"),
TEXT("大戦略WEB MASTER"),
MB_OK);
MySaveAs(hEdit);
return -1;
}
nLen = GetWindowTextLength(hEdit);
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * (nLen + 1));
lpszBuf = (LPTSTR)GlobalLock(hMem);
GetWindowText(hEdit, lpszBuf, nLen + 1);
hFile = CreateFile(szFile,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
WriteFile(hFile,
lpszBuf,
(DWORD)lstrlen(lpszBuf) * sizeof(TCHAR),
&dwAccBytes,
NULL);
GlobalUnlock(hMem);
GlobalFree(hMem);
SendMessage(hEdit, EM_SETMODIFY, FALSE, 0);
wsprintf(szTitle, szTitle_org, szFileTitle, nLen);
SetWindowText(GetParent(hEdit), szTitle);
if (CloseHandle(hFile) == 0) {
MessageBox(hEdit, TEXT("Error CloseHandle"), TEXT("Error"), MB_OK);
return -1;
}
return 0;
}
int MyConfirm(HWND hEdit)
{
int id;
if (SendMessage(hEdit, EM_GETMODIFY, 0, 0) == TRUE) {
id = MessageBox(hEdit,
TEXT("文書が更新されています。\n変更を保存しますか?"),
TEXT("大戦略WEB MASTER"),
MB_YESNOCANCEL | MB_ICONEXCLAMATION);
if (id == IDYES) {
MySave(hEdit);
} else if (id == IDCANCEL) {
return IDCANCEL;
} else if (id == IDNO) {
return IDNO;
}
}
return 0;
}
int MyYmd(HWND hEdit, HWND hEdit2, int nOption)
{
SYSTEMTIME st;
TCHAR szBuf[64];
GetLocalTime(&st);
switch (nOption) {
case 1:
wsprintf(szBuf, TEXT("%d年%02d月%02d日"), st.wYear, st.wMonth, st.wDay);
break;
case 2:
wsprintf(szBuf, TEXT("%d/%02d/%02d"), st.wYear, st.wMonth, st.wDay);
break;
case 3:
wsprintf(szBuf, TEXT("%02d時%02d分%02d秒"), st.wHour, st.wMinute, st.wSecond);
break;
case 4:
wsprintf(szBuf, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);
break;
}
SetWindowText(hEdit2, szBuf);
SendMessage(hEdit2, EM_SETSEL, 0, -1);
SendMessage(hEdit2, WM_COPY, 0, 0);
SendMessage(hEdit, WM_PASTE, 0, 0);
return 0;
}
int MySetInfo(HWND hEdit, HWND hEdit2 )
{
TCHAR szBuf[256], szBuf2[64];
int nLen, nLine, nStart, nEnd;
nLen = GetWindowTextLength(hEdit);
nLine = (int)SendMessage(hEdit, EM_GETLINECOUNT, 0, 0);
wsprintf(szBuf,
TEXT("文字数= %d 文字 行 = %d "), nLen, nLine);
SendMessage(hEdit, EM_GETSEL, (WPARAM)&nStart, (LPARAM)&nEnd);
if (nStart != nEnd) {
wsprintf(szBuf2, TEXT("\r\n選択開始位置 = %d, 終了位置 = %d"), nStart, nEnd);
lstrcat(szBuf, szBuf2);
}
SendMessage(g_hStatus,SB_SETTEXT,0 | 0 ,
(LPARAM)szBuf);
return 0;
}
LRESULT CALLBACK MyEditProc(HWND hEdit, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_LBUTTONUP:
case WM_KEYUP:
MySetInfo(hEdit, hSubEdit);
break;
}
return CallWindowProc(OrgEditProc, hEdit, msg, wp, lp);
}
BOOL CALLBACK MyDlgProc(HWND hDlg,UINT msg,WPARAM wp, LPARAM lp)
{
static HWND hList;//リストハンドル
int id;
TCHAR name[80];
switch(msg){
case WM_COMMAND:
switch(LOWORD(wp)){
case IDCANCEL:
EndDialog(hDlg,IDOK);
AddCount = FALSE;
return TRUE;
case IDOK:
id = ListBox_GetCurSel(hList);
if(id < 0) break;
wsprintf(name,TEXT("%s"),
List[id]);
SetWindowText(hEdit2,name);
SendMessage(hEdit2,EM_SETSEL,0,-1);
SendMessage(hEdit2,WM_COPY,0,0);
SendMessage(hEdit ,WM_PASTE,0,0);
// AddCount = FALSE;
return TRUE;
}
case WM_INITDIALOG:
hList = GetDlgItem(hDlg,IDC_LIST1);
if (AddCount == FALSE){
for (int c = 0; c < MAXWEAPONS ; c++){
ListBox_AddString(hList,List[c]);
}
AddCount = TRUE;
return TRUE;
}
}
return FALSE;
}
HWND MyCreateToolbar(HWND hWnd)
{
HWND hTool;
TBADDBITMAP tb;
int stdid, i;
hTool = CreateWindow(TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE, //ウィンドウスタイル
0, 0, 0, 0,
hWnd,
(HMENU)ID_MYTOOL,
hInst,
NULL);
SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
stdid = (int)SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tb);
for (i = 0; i < 6; i++)
tbb[i].iBitmap += stdid;
SendMessage(hTool, TB_ADDBUTTONS, (WPARAM)8, (LPARAM)&tbb[0]);
return hTool;
}
void MyCreateStatusbar(HWND hWnd)
{
g_hStatus = CreateWindowEx(
0, //拡張スタイル
STATUSCLASSNAME, //ウィンドウクラス
NULL, //タイトル
WS_CHILD | SBARS_SIZEGRIP | CCS_BOTTOM | WS_VISIBLE,//ウィンドウスタイル
0, //X座標
0, //Y座標
0, //ウィンドウ幅
0, //高さ
hWnd, //親ウィンドウ
(HMENU)ID_STATUS, //ステータスバーのID
hInst, //インスタンスハンドル
NULL);
SendMessage(g_hStatus, SB_SIMPLE, 0, 0);
}
しかしエラーばかりです
コンパイラはVC++ 2008です
僕的にはエディットコントロールに問題がありそうなんですが
よく分かりません
誰か助けてください!!!
追伸
リンカや関数の定義は他のヘッダに書いてあります