wordのように

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
student
記事: 5
登録日時: 2ヶ月前

wordのように

#1

投稿記事 by student » 2ヶ月前

wordのように行で区切り、文字列を入力できるプログラムを作りたいです。
また、入力した文字列を自由な行に移動できるようにもしたいです。
dxライブラリの関数一覧を見てみたのですが、どうすればよいか皆目見当もつきません。
他力本願で、ごみのような質問ですが、、もしよろしければ
プログラムのサンプルと解説を添えていただけるとありがたいです。

アバター
あたっしゅ
記事: 163
登録日時: 8年前
住所: 東京23区
連絡を取る:

Re: wordのように

#2

投稿記事 by あたっしゅ » 2ヶ月前

>wordのように行で区切り、文字列を入力できるプログラムを作りたいです。
>また、入力した文字列を自由な行に移動できるようにもしたいです。

誰も答えていないので。
「dxライブラリ」は、上記のようなプログラムを作るには、不向きです。
手提鞄あたっしゅ、[MrAtassyu] C095 月東L26a 手提鞄屋魚有店(てさげかばんやうおありてん)

アバター
あたっしゅ
記事: 163
登録日時: 8年前
住所: 東京23区
連絡を取る:

Re: wordのように

#3

投稿記事 by あたっしゅ » 2ヶ月前

Windows でなら、Visual Studio で、C# のプロジェクトを選んで、フォームにテキストボックスを貼り付けるだけで、複数行の文字列を入力でき、入力した文字列を自由な行に移動できるプログラムが出来ます。くわしくは、C# に詳しい方に、お任せします。

C++ にこだわるなら、https://forest.watch.impress.co.jp/docs ... 33620.html
Embarcadero C++Builder のフル機能を無償で(ja)
で、フォームにテキストボックスを貼り付けるだけで、出来ます。といっても、C++Builder 流な C++ ですが。
手提鞄あたっしゅ、[MrAtassyu] C095 月東L26a 手提鞄屋魚有店(てさげかばんやうおありてん)

student
記事: 5
登録日時: 2ヶ月前

Re: wordのように

#4

投稿記事 by student » 2ヶ月前

返信遅れてすみません。
丁寧に教えていただきありがとうございます。
自分はc#は全然わからないので今回は諦めますw

Bull
記事: 114
登録日時: 4年前

Re: wordのように

#5

投稿記事 by Bull » 2ヶ月前

エディットコントロールを使用するなら、C言語でもできます。
こういうページがあります。
メモ帳を作る

かずま

Re: wordのように

#6

投稿記事 by かずま » 2ヶ月前

word のように、というので、文字のサイズやフォンや色を変更できる
ものを作りたいのかと思って、それは難しいからと放置していたのですが、
メモ帳程度でよいのなら、エディットコントロールでできます。

コード:

#undef UNICODE
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>   // fopen, fclose, fread, fwrite, fseek, ftell
#include <stdlib.h>  // malloc, free

char *fname, *text;
BOOL modified = FALSE;
HWND hEdit;
HINSTANCE hInst;

void onCreate(HWND hwnd)
{
	hEdit = CreateWindowA("EDIT", NULL,
		WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | WS_VSCROLL
		| ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE,
		10, 10, 600, 420, hwnd, (HMENU)1, hInst, NULL);
	SetWindowText(hEdit, text);
}

void onDestroy()
{
	if (modified) {
		FILE *fp = fopen(fname, "wb");
		if (fp) {
			int size = GetWindowTextLength(hEdit);
			char *p = (char *)malloc(size + 1);
			if (p) {
				size = GetWindowText(hEdit, p, size + 1);
				fwrite(p, 1, size, fp);
				fclose(fp);
				free(p);
			}
		}
	}
	free(text);
	PostQuitMessage(0);
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg) {
	case WM_CREATE:  onCreate(hwnd); break;
	case WM_DESTROY: onDestroy();  break;
	case WM_COMMAND:
		if (LOWORD(wp) == 1 && HIWORD(wp) == EN_UPDATE) modified = TRUE;
		break;
	default: return DefWindowProc(hwnd, msg, wp, lp);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE h, HINSTANCE prev, LPSTR cl, int cs)
{
	if (*cl) {
		fname = cl;
		FILE *fp = fopen(fname, "rb");
		if (!fp) {
			MessageBox(NULL, "ファイルがオープンできない", "", 0);
			return 0;
		}
		fseek(fp, 0, SEEK_END);
		int size = ftell(fp);
		rewind(fp);
		text = (char *)malloc(size + 1);
		if (!text) return 0;
		size = fread(text, 1, size, fp);
		text[size] = '\0';
		fclose(fp);
	}
	else fname = (char *)"無題.txt";

	hInst = h;
	WNDCLASS wcl = { 0, WindowProc, 0, 0, h, NULL,
		LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), NULL, "wc" };
	if (!RegisterClass(&wcl)) return FALSE;
	if (!CreateWindowEx(WS_EX_COMPOSITED, "wc", fname,
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
		80, 60, 640, 480, NULL, NULL, h, NULL)) return 0;

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
コマンドラインの第1引数をファイル名とします。

Visual Studio で実行する場合は、
プロジェクトのプロパティの構成プロパティのデバッグの
コマンド引数に、ファイル名を書いてから実行してください。

エクスプローラで、ファイルを実行ファイルのアイコンに
ドラッグ&ドロップしても動きます。

終了するとき、テキストが修正されてればファイルを更新します。

student
記事: 5
登録日時: 2ヶ月前

Re: wordのように

#7

投稿記事 by student » 1ヶ月前

丁寧に教えていただきありがとうございます。
ただ自分はstdioとdxlibの初歩的な部分しかわからないので、皆様のアドバイスを参考にすこしずつググって勉強します。
自分の能力に見合わない質問でしたすいませんでした。

YuO
記事: 922
登録日時: 8年前
住所: 東京都世田谷区

Re: wordのように

#8

投稿記事 by YuO » 1ヶ月前

いまさらですが,一応Rich Editというコントロールがあったりします。
Editコントロールはメモ帳に相当しますが,Rich Editコントロールはワードパッドに相当します。

LoadLibrary等が必要なので,Editコントロールよりは使い方が面倒ではありますが……。

返信

“C言語何でも質問掲示板” へ戻る