MFC重绘控件

举个按钮简单重绘的例子。

头文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CMyButton : public CButton
{
public:
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};
 
class CMFCApplication1Dlg : public CDialogEx
{
	...
protected:
	virtual void DoDataExchange(CDataExchange* pDX);
	CMyButton m_myButton;
	...
};

Read more

ultraiso虚拟光驱总是删除不干净

用regedit查找ultraiso,找到PropertyStore结点下有个结点中含有

Users\euhat\AppData\Local\Temp\UltraISO\UltraISO.exe

在资源管理器中找到相应目录,发现如下文件删不掉。

C:\Users\euhat\AppData\Local\Temp\UltraISO\drivers\ISODrv64.sys

则,再次运行ultraiso程序,选项->配置->虚拟光驱->设备数量设为0,保存。退出ultraiso程序。
再regedit查找ultraiso,找到

1
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\ISODrive

删除此键,退出regedit,重启电脑就能看到在资源管理器里,烦人的虚拟光驱盘符去掉了。

记得上面提到的ISODrv64.sys现在可以删掉。

本地网卡和WIFI网卡共存不能上网

原因是路由都走本地网卡了,这点可以用tracert命令证明。

于是,用以下三条命令可实现上网:

1
2
3
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 192.168.43.1
route add 192.168.0.0 mask 255.255.0.0 192.168.1.1

其中192.168.43.1是WIFI网关,192.168.1.1是本地网关。

MessageDialogFragmentV4 can't find android.support.v4.app

编译UVCCamera生成signed apk时,报一堆这样的错:

1
2
3
Warning:com.serenegiant.dialog.MessageDialogFragmentV4: can't find referenced method 'void show(android.support.v4.app.FragmentManager,java.lang.String)' in program class com.serenegiant.dialog.MessageDialogFragmentV4
Warning:com.serenegiant.dialog.MessageDialogFragmentV4: can't find referenced method 'void setTargetFragment(android.support.v4.app.Fragment,int)' in program class com.serenegiant.dialog.MessageDialogFragmentV4
com.serenegiant.dialog.MessageDialogFragmentV4: can't find referenced class android.support.v4.app.Fragment

解决办法,把libuvccamera和usbCameraCommon目录中的build.gradle修改一下,注释掉'support-v4':

1
2
3
compile("com.serenegiant:common:${commonLibVersion}") {
//	exclude module: 'support-v4'
}

日语学习还不明白的地方

李さんは(部長に)ほめられました。
李さんはほめられました。

陳さんは飼っていた小鳥に逃げられました。

空気読まんかい!空気を!

厳しい暮らしを強いられる

この附近は夜くすりをまいて水洗いをしますので寝ないで下さい

君は一人の人間に過ぎない
君は世界そのものだ

君のこと愛するなんて別に君は誰だっとじゃなくて

ろくに...ない
かねない
しかるべきだ
当たり前だ

いかが(如何) わらった(笑った) まなばん(学ばん)

仅か(僅か)(わずか)

にもかかわらず
あいかわらず

たった
ただ
ただしい
ただで

母亲は子供を起きさせる。
母亲は子供を起こす。
なかなか食わせる店だ

ながら
中国にいながら見れる

新た 新しい

漢の1/3を手に入れた曹操はみずからを魏王となのり、劉備たちのすむ荊州に攻めこんできた。

地元(じもと)の小学生によるお祝いの演奏会が開(ひら)かれた。
举办了由当地的小学生所组成的庆祝演奏会。

すでに友四郎との結婚を決意していた。
この新しい薬は、何年にもわたる研究のすえに作り出されたものだ。
这个新药,是经过多年研究开发后生产出来的药品。

銀行と商事会社の両方の入社試験に合格した兄は、いく日も考えた末に(あげくに)銀行を選んだ。

そろそろ安穏な生活に飽きがきていた。

経営は夫の政之の力に寄るところが大きい。
四女の耀子は独身で舞台女優の卵であり、政之の弟でテレビのディレクターをしている研一に想いを寄せている。

女であることに徹底できない安燈に研一は苛立ちを感じていた。

会社に入ったばっかりで精神的にいろんなプレッシャーがかかりがちな時期。上司に仕事を頼まれても正直できる気がしません。だから、つい「すみません、もういっぱいいっぱいで…」と断った。なんてことしたら、新入社員としてやっぱりマズいのでしょうか?

耀子には横暴としか思えない政之のために、料理を習っているという英子を見て、ある感動を覚えるのだった。

こつぶなこむぎがこいき

Linux禁止用户访问某个目录

比如root用户生成了一个文件夹dir0,再执行

1
chmod o-rwx dir0

那么当非root权限用户usr0访问此目录

1
2
cd dir0/
bash: cd: dir0/: Permission denied

Android NDK动态获取系统版本

让电脑连上安卓手机上,执行

1
2
adb shell
cat /system/build.prop

可看到

1
2
3
4
5
...
ro.build.version.sdk=18
ro.build.version.codename=REL
ro.build.version.release=4.3
...

于是jni中可写如下代码获取系统版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <sys/system_properties.h>
 
static int test(){
    char *key = (char *)"ro.build.version.sdk";
    //char *key = (char *)"ro.build.version.release";
    char value[1024] = {0};
    int ret = __system_property_get(key, value);
    if (ret <= 0 ) {
        DBG(("get prop value failed.\n"));
        return 0;
    }
    DBG(("ro.build.id is [%s]\n", value));
 
    return 0;
}

Android jni基于NdkMediaCodec硬解码mjpeg

NdkMediaCodec需要安卓5.0以上系统才能运行,在Android.mk里加入

1
LOCAL_LDLIBS += -lmediandk

如果是在安卓5.0以下系统中跑,程序会直接崩掉,主函数都不会进,所以要在旧手机中运行,要根据系统版本来判断是不是5.0以上系统,如果是则动态加载libmediandk.so,而不要写死在编译脚本里。

还有,要看手机上有没有解mjpeg的硬解码器,通过以下java代码来查看

1
2
3
4
5
6
7
8
9
10
11
12
int n = MediaCodecList.getCodecCount();
for (int i = 0; i < n; ++i) {
	MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
	String[] supportedTypes = info.getSupportedTypes();
	boolean mime_support = false;
	if(info.isEncoder()){
		continue;
	}
	for (int j = 0; j < supportedTypes.length; ++j) {
		Log.v("euhat", "codec info:" + info.getName()+" supportedTypes:" + supportedTypes[j]);
	}
}

以下是jni硬解码代码,因为没找到支持mjpeg硬解的手机,所以还没实际跑起来过。
但实际测试过程中,新的手机上软解1920x1080的mjpeg输出yuv都很流畅了。

Read more